java - org.hibernate.hql.internal.ast.QuerySyntaxException : unexpected token: >= near line 1

标签 java mysql database hibernate exception

当我使用 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/

相关文章:

java - PreparedStatement 没有读取我的 PostGIS Geography 的所有参数

java - 无法触发构造函数级别验证

php - 在 zf2 左连接中应用多个条件

php - 出现错误 - 警告:DbQuery::__construct() 缺少参数 1

sql - 为什么它们的表之间存在没有关系的数据库?

mysql - MySQL 中何时使用单引号、双引号和反引号

java - 未最大化时,线条绘制在错误的位置

java - 分块上传好还是分段压缩上传好

java - Libgdx:无限世界。如何?

mysql - 获取 MySQL 表中第二高的值