虽然SQL有效,但Hibernate在编译时会抛出“QueryException”

时间:2011-11-16 15:33:59

标签: hibernate hql

我面临一种奇怪的问题,不知道要去哪个方向解决它;-)

我目前正在开发一个使用Hibernate存储员工的Web应用程序。

插入,删除,搜索;一切正常。

但是!
每个员工都有一个由字符串列表表示的属性。

我想在此属性中搜索一个或两个或更多条目(它与员工的技能有关;

例如:我搜索“数据库”或“数据库,管理”,这将导致每个员工在他/她的skillGroups-property中拥有“数据库”和“管理”。

如果我只搜索一个技能组,一切都按预期工作。 但是当我尝试搜索两个或更多技能组时,Hibernate继续抛出QueryException,尽管生成的SQL似乎是正确的(如果我直接在MySQL-Workbench中执行它,我得到了预期的结果) 。

例外情况如下:

org.hibernate.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:231)
org.hibernate.hql.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:138)
org.hibernate.engine.query.HQLQueryPlan.(HQLQueryPlan.java:101)  
org.hibernate.engine.query.HQLQueryPlan.(HQLQueryPlan.java:80)  
org.hibernate.engine.query.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:124)
org.hibernate.impl.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:156)
org.hibernate.impl.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:135)
org.hibernate.impl.SessionImpl.createQuery(SessionImpl.java:1770)  
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)  
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)

以下是我想要生成的SQL:

SELECT * 
  FROM employee.new_view 
 WHERE idemployee IN (
  SELECT idemployee 
    FROM employee.employee_skillgroups 
   WHERE idskillgroup = 'Sprachen')
 AND idemployee IN (
  SELECT idemployee 
    FROM employee.employee_skillgroups 
   WHERE idskillgroup = 'Services')

1 个答案:

答案 0 :(得分:3)

创建查询时,您可能需要使用session.createSQLQuery(sqlString)而不是session.createQuery(sqlString)