当我使用 Hibernate 运行此查询时,出现异常:
String query = "FROM A st, B g "
+ "WHERE st.name = g.name AND st.name LIKE :name AND "
+ "g.id = ANY (SELECT c FROM C "
+ "WHERE CASE WHEN name = 'test' THEN condiction >= :value end)";
try {
return (List) entityManager.createQuery(query)
.setParameter("name", "%" + name + "%")
.setParameter("value", value).getResultList();
} catch (SecurityException | IllegalStateException | RollbackException e) {
LOGGER.info(e.getMessage());
}
return null;
我得到了一个异常(exception):
java.lang.IllegalArgumentException: org.hibernate.hql.internal.ast.QuerySyntaxException: unexpected token: >= near line 1, column 336 ...
at org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1750)
at org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1677)
at org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1683)
at org.hibernate.jpa.spi.AbstractEntityManagerImpl.createQuery(AbstractEntityManagerImpl.java:331)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
有什么想法吗?我使用mysql数据库。我可以在 hibernate 状态下使用 CASE WHEN THEN 吗?同样的查询在命令行上运行良好。
谢谢 干杯
最佳答案
CASE
表达式的语法不正确。应该是这样的(我觉得):
WHERE CASE :name
WHEN 'test' THEN condiction >= :value
ELSE false
END
... 除了 condiction
在这里没有任何意义。
无论如何,CASE
表达式的语法在 Java EE 6 教程中给出:
关于java - org.hibernate.hql.internal.ast.QuerySyntaxException : unexpected token: >= near line 1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30008782/