我需要在 JPA 查询中使用LIKE运算符。我需要将它用于除 String 以外的类型,但 JPA 标准 API 允许我只添加 String 参数。我尝试使用.as(String.class)
但失败了,还尝试CAST
从底层调用该函数,但Oracle
由于未知原因再次失败。
我也尝试在 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]
我直接对Oracle执行了相同的查询执行了相同的查询,所以从这个角度来看应该是合理的。所以问题是Hibernate是问题。关于如何修复它的任何建议?
如何使用 JPA Criteria 编写此查询?