是否可以执行字符串函数,例如
LOWER
IN
JPQL中的表达式?
我尝试使用类似于以下内容的JPQL查询(为了简洁起见,查询已经简化):
SELECT e from MyEntity e WHERE LOWER(e.myAttribute) IN (LOWER(?1))
但是,对于Hibernate/Oracle,这样的查询会导致与以下类似的错误:
WARN o.h.e.jdbc.spi.SqlExceptionHelper - SQL Error: 7001, SQLState: 07001
ERROR o.h.e.jdbc.spi.SqlExceptionHelper - Invalid parameter count for "LOWER", expected count: "1"; SQL statement:
select e.my_attribute from my_entity e where lower(e.my_attribute) in (lower(?, ?, ?)) [7001-197]
生成的SQL查询无效:
lower(e.my_attribute) in (lower(?, ?, ?))
我认为应该更像以下内容:
lower(e.my_attribute) in (lower(?), lower(?), lower(?))
我不清楚JPA规范中是否可以将字符串函数应用于
表达式,如果没有,那是什么合理的选择。我用的是
在
OR
下
我使用的是jpa2.0/hibernate4.2/oracle11g/12c,我希望避免使用任何特定于供应商的代码,但是如果可能的话,使用纯JPA/JPQL。