【发布时间】:2017-07-27 23:34:11
【问题描述】:
我想在 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 与字符串进行比较。所以,我必须将此 BigDecimal 转换为 String
jpql(不是本机查询)中有没有办法将 BigDecimal 转换为 String?像 to_char() 这样的东西。
【问题讨论】:
-
String#valueOf和BigDecimal#toString似乎是显而易见的选择。这些对你不起作用? -
JPQL like expression requires int value 或 JPA Like Operator with Integer 的可能重复项。两者都说同样的事情:将
m.id转换为查询文本中的字符串,因此like两边都有字符串。 -
请检查我的答案,我使用 JPQL 对其进行了测试,它工作正常