2014-06-18 54 views
3

我得到这个休眠例外:这个HQL有什么问题?失踪的逗号在哪里?

org.hibernate.QueryException: , expected in SELECT [select tc.id as 
id, tc.terminalServerPort.id as terminalServerPortId, 
tc.terminalServerPort.terminalServer.name as terminalServerName, 
tc.terminalServerPort.terminalServer.ipConfig.ipAddress as 
terminalServerIpAddress, tc.terminalServerPort.portNumber as 
terminalServerPort from 
com.windriver.dsm.labmanagement.data.TargetConsole tc where 
tc.target.id = :targetId order by id asc] 

任何想法? 谢谢!

+1

cany yyou向我们展示hql-查询吗? – Jens

+0

你是什么意思?这是HQL查询。 –

+0

您的java源代码中的查询? – Jens

回答

1

我找到了解决方案。

显然我使用的休眠版本(休眠3)不允许将别名分配给关联的实体。当我删除这些别名 - 查询工作。

下面是正确的代码:

select tc.id, tc.terminalServerPort.id, 
tc.terminalServerPort.terminalServer.name, 
tc.terminalServerPort.terminalServer.IPConfig.IPAddress, 
tc.terminalServerPort.portNumber 
from TargetConsole tc where tc.target.id = :targetId order by id asc 

感谢您的帮助家伙!

+0

您删除了order by子句(您正在使用没有别名的id)。 –

+0

@LluisMartinez谢谢,我编辑了我的答案,包括order by子句。 –

1

Even when I narrow the HQL to the minimum I still get that exception - , expected in SELECT [select tc.id as id from com.windriver.dsm.labmanagement.data.TargetConsole as tc]

你不应该写这样?

[select tc.id as id from com.windriver.dsm.labmanagement.data.TargetConsole tc]

给别名表时,你为什么写as

+0

从技术上讲,它更为正确,但'as'方式也适用。至少在JPQL中,我承认我不能100%确定它是否也能在HQL中工作。 – Gimby

+0

根据[hibernate文档](http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/queryhql。html) –

1

您需要为您正在使用的sessionFactory配置您的hibernate转换器属性。

hibernate.query.factory_class = org.hibernate.hql.ast.ASTQueryTranslatorFactory