java - 包含 LIKE 转换为条件的 JPQL 查询

标签 java oracle hibernate jpa criteria

我需要在 JPA 查询中使用 LIKE 运算符。我需要将它用于 String 以外的类型,但 JPA 标准 API 允许我仅添加 String 参数。我尝试使用 .as(String.class) 但出现了一些问题,并且还尝试从底层 Oracle 调用 CAST 函数,但再次失败我不知道原因。

我也尝试在 JPQL 中编写查询,它按预期工作。这是查询:

SELECT p from CustomerOrder p where p.id like '%62%'

更新:

查询必须以通用方式构建,因为它用于过滤,因此需要在运行时创建。在已经创建的查询上,我尝试添加 LIKE 子句,如下所示:

query.where(builder.like(selectAttributePath.as(String.class), "%"+filterValue.toString().toLowerCase()+"%"));

但这会因以下异常而崩溃:

org.hibernate.hql.internal.ast.QuerySyntaxException: expecting CLOSE, found '(' near line 1, column 156 [select distinct generatedAlias0.id from de.brueckner.mms.proddetailschedact.data.CustomerOrder as generatedAlias0 where cast(generatedAlias0.id as varchar2(255 char)) like :param0]

我使用 SQLDeveloper 直接向 Oracle 执行了相同的查询,因此从这个角度来看它应该是合理的。所以问题是Hibernate的问题。关于如何修复它有什么建议吗?

如何使用 JPA Criteria 编写此查询?

最佳答案

我通过从底层 Oracle DB 调用 'TO_CHAR' 函数并使用 LIKE 运算符(如正常的 LIKE 运算符)解决了该问题>字符串。

query.where(builder.like(selectAttributePath.as(String.class), "%" +filterValue.toString().toLowerCase() + "%")

关于java - 包含 LIKE 转换为条件的 JPQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19153120/

相关文章:

java - JPA2 缓存或 hibernate 缓存

java - 如何使 Activity 在每次进入 Activity 时不重新加载/刷新?

java - 将对象转换为它们未实现但具有相同方法签名的接口(interface)

java - Spring NamedParameterJdbcTemplate 查询的性能非常慢

oracle - Io 异常 : Oracle Error ORA-12650 after upgrading Oracle to 12g

hibernate - Grails 1.2.0部署问题:org.hibernate.MappingException

java - 为什么@Value 作为构造函数的参数正确填充属性?

java - Eclipse 中划掉的静态导入是什么意思?

SQL查询问题

java - Hibernate:如何在删除拥有的实体后更新父行