【问题标题】:org.hibernate.hql.internal.ast.QuerySyntaxException: unexpected token: >= near line 1org.hibernate.hql.internal.ast.QuerySyntaxException:意外令牌:> = 第 1 行附近
【发布时间】:2015-07-12 13:53:16
【问题描述】:

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

我得到了一个执行:

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 一个数据库。我可以在休眠时使用 CASE WHEN THEN 吗?相同的查询在命令行上工作正常。

谢谢 干杯

【问题讨论】:

  • 很难说。您是否尝试部分运行您的 SQL 并查看什么是好的,什么不是?
  • 当我只运行 WHERE name = 'test' AND condiction >= :value 时,我工作得很好。但我需要一个 WHEN CASE 子句。我认为,这就是问题所在。

标签: java mysql database hibernate exception


【解决方案1】:

CASE 表达式的语法不正确。应该是这样的(我认为):

  WHERE CASE :name
    WHEN 'test' THEN condiction >= :value
    ELSE false
  END

...除了condiction 在这里没有任何意义。

无论如何,CASE 表达式的语法在 Java EE 6 教程中给出:

【讨论】:

  • 我试了下,还是不行。我得到了同样的例外。 WHERE CASE :name WHEN 'test' THEN condiction >= :value ELSE false end。其他想法?
  • 就像我说的,condiction 的东西对我来说毫无意义。这到底是怎么一回事?
  • 我想检查不同的情况,而不仅仅是一个。 CASE :name WHEN 'test' THEN 条件 >= :value WHEN 'test2' THEN 条件
  • 但是condiction 不是有效的HSQL
  • Hibernate Case expressions 怎么样。检查 11.4.11。 CASE 表达式。还有他的16.10. Expressions
猜你喜欢
  • 2016-02-21
  • 1970-01-01
  • 1970-01-01
  • 2015-11-14
  • 2016-12-21
  • 2016-06-08
  • 2014-08-20
  • 2020-03-13
  • 2020-01-26
相关资源
最近更新 更多