Java 查询在控制台中工作,但在应用程序中不工作
我对hibernate 4.0.1中的本机查询有问题。我的查询可以在数据库控制台中工作,但不能在应用程序中工作。我有: 名为“case”的表有两列指向同一个表-名为“cost”的表有列“value”。我的查询如下所示:Java 查询在控制台中工作,但在应用程序中不工作,java,sql,hibernate,jpa,Java,Sql,Hibernate,Jpa,我对hibernate 4.0.1中的本机查询有问题。我的查询可以在数据库控制台中工作,但不能在应用程序中工作。我有: 名为“case”的表有两列指向同一个表-名为“cost”的表有列“value”。我的查询如下所示: SELECT COUNT(*), a.value, b.value, ... FROM case AS c LEFT JOIN cost AS a ON c.fist_cost_id = a.id LEFT JOIN cost AS b ON c.second_cost_id =
SELECT COUNT(*), a.value, b.value, ...
FROM case AS c
LEFT JOIN cost AS a ON c.fist_cost_id = a.id
LEFT JOIN cost AS b ON c.second_cost_id = b.id
...
GROUP BY a.value, b.value, ...
查询实际上要复杂得多,但我认为这无关紧要,所以我加了点。我在数据库控制台中编写此查询时,抛出了应用程序错误:
原因:
org.hibernate.loader.custom.ununiquediscoveredsqlaliasexception:
在自动发现过程中遇到重复的sql别名[value]
本地sql查询位于
org.hibernate.loader.custom.CustomLoader.autoDiscoverTypes(CustomLoader.java:594)
[hibernate-core-4.0.1.Final.jar:4.0.1.Final]
org.hibernate.loader.loader.getResultSet(loader.java:1986)
[hibernate-core-4.0.1.Final.jar:4.0.1.Final]
org.hibernate.loader.loader.doQuery(loader.java:829)
[hibernate-core-4.0.1.Final.jar:4.0.1.Final]
org.hibernate.loader.loader.doQueryAndInitializeNonLazyCollections(loader.java:289)
[hibernate-core-4.0.1.Final.jar:4.0.1.Final]
org.hibernate.loader.loader.doList(loader.java:2463)
[hibernate-core-4.0.1.Final.jar:4.0.1.Final]
org.hibernate.loader.loader.doList(loader.java:2449)
[hibernate-core-4.0.1.Final.jar:4.0.1.Final]
org.hibernate.loader.loader.listIgnoreQueryCache(loader.java:2279)
[hibernate-core-4.0.1.Final.jar:4.0.1.Final]
org.hibernate.loader.loader.list(loader.java:2274)
[hibernate-core-4.0.1.Final.jar:4.0.1.Final]
org.hibernate.loader.custom.CustomLoader.list(CustomLoader.java:331)
[hibernate-core-4.0.1.Final.jar:4.0.1.Final]
org.hibernate.internal.SessionImpl.listCustomQuery(SessionImpl.java:1585)
[hibernate-core-4.0.1.Final.jar:4.0.1.Final]
org.hibernate.internal.AbstractSessionImpl.list(AbstractSessionImpl.java:224)
[hibernate-core-4.0.1.Final.jar:4.0.1.Final]
org.hibernate.internal.SQLQueryImpl.list(SQLQueryImpl.java:156)
[hibernate-core-4.0.1.Final.jar:4.0.1.Final]
org.hibernate.ejb.QueryImpl.getResultList(QueryImpl.java:252)
[hibernate-entitymanager-4.0.1.Final.jar:4.0.1.Final]。。。138更多
你知道怎么修吗
[编辑]
有人提到“value”不是列的正确名称。事实上,这一列并没有命名为“value”,但有点不同。我严格的合同禁止发布任何关于代码的信息。我必须尽可能多地解释它,所以我重命名了fly中的所有变量,并没有想到“value”这个词是错误的。所以列没有命名为“value”,但其余的仍然适用。value是保留字,所以您有问题。您需要重命名列。您必须添加别名以避免重复:
SELECT COUNT(*), a.value AS value0, b.value AS value1, ...
value
不是SQL保留字吗?或者用`symbol:a.value`,b.value`
@LuiggiMendoza包装列名,我认为这不管用,jpql查询中的a.value是属性字段(value)的名称,然后映射到db列“value”,所以a您可以在列映射中而不是在查询中执行此操作。