将BigDecimal转换为字符串,以便使用JPQL查询中的类似的BigDecimal ID过滤



我想使用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();
}

最新更新