将BigDecimal转换为String,以便在JPQL查询中使用LIKE过滤一些BigDecimal ID

时间:2017-03-07 16:45:15

标签: java jpa jpql

我想在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()。

1 个答案:

答案 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();
}