我想使用jpql中的关键字过滤bigDecimal ID。我使用eclipselink。
说我们有IDS:197718,182123,182912,123456,我想从eNtity.ID的桌子中提取所有行。如果操作成功,结果将是: 182123,182912 。
我的查询会。
public List<MyEntity> getFilteredMyEntity(String idStr) {
return entityManager.createQuery("select m from MyEntity m where m.id like :idStr")
.query.setParameter("idStr", "%" + idStr+ "%")
.getResultList();
}
说我以这种方式调用此方法,以获取ID中包含" 18"的所有实体:
List<MyEntity> entities = getFilteredMyEntity("18");
但是我得到了一个例外,因为我无法将BigDecimal与字符串进行比较。因此,我必须将此bigdecimal转换为字符串
jpql(不是本机查询)中有没有办法将bigdecimal转换为字符串?to_char()。
您可以在 jpql 中进行此操作(我对其进行了测试,它与我一起使用)
注意:我正在使用Hibernate Provider的JPA 2.1
public List<MyEntity> getFilteredMyEntity(String idStr) {
return entityManager.createQuery("SELECT m FROM MyEntity m WHERE CAST( m.id AS string ) LIKE :idStr")
.setParameter("idStr", "%" + idStr+ "%").getResultList();
}
和这是使用本机Query
的另一种方法public List<MyEntity> getFilteredMyEntity(String idStr) {
return entityManager.createNativeQuery("SELECT m FROM MyEntity m WHERE CAST(m.id AS varchar(10)) LIKE :idStr")
.setParameter("idStr", "%" + idStr+ "%").getResultList();
}