【问题标题】:convert BigDecimal to String in order to filter some BigDecimal ids using LIKE in JPQL query将 BigDecimal 转换为 String,以便在 JPQL 查询中使用 LIKE 过滤一些 BigDecimal id
【发布时间】: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#valueOfBigDecimal#toString 似乎是显而易见的选择。这些对你不起作用?
  • JPQL like expression requires int valueJPA Like Operator with Integer 的可能重复项。两者都说同样的事情:将m.id 转换为查询文本中的字符串,因此like 两边都有字符串。
  • 请检查我的答案,我使用 JPQL 对其进行了测试,它工作正常

标签: java jpa jpql


【解决方案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();
}

【讨论】:

  • @NellyJunior 我注意到我正在将休眠与 JPA 一起使用,实际上我对其进行了测试,但也没有与任何其他提供商进行测试,无论如何您可以按照您看到的方式编辑我的答案它会在未来帮助任何人,我会检查你的编辑,谢谢:)
猜你喜欢
  • 2013-08-26
  • 2020-05-29
  • 2016-07-23
  • 2011-05-01
  • 1970-01-01
  • 2012-09-05
  • 1970-01-01
  • 2012-05-30
  • 1970-01-01
相关资源
最近更新 更多