我想在JPQL中使用LIKE关键字过滤BigDecimal ID。我使用EclipseLink。
假设我们有id:197718,182123,182912,123456,我想从表中提取所有行,其中entity.id像%18%。如果操作成功,结果将是: 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与String进行比较。所以,我必须将此BigDecimal转换为String
在jpql(非本机查询)中有没有办法将BigDecimal转换为String?类似于to_char()。
答案 0 :(得分:1)
您可以在 JPQL 中执行此操作(我测试了它并且它与我合作)
注意:我正在使用JPA 2.1和Hibernate提供程序
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();
}
以下是使用原生查询
的另一种方法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();
}