我需要在 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/