Java Hibernate HQL中的“where exists”

Java Hibernate HQL中的“where exists”,java,hibernate,orm,hql,Java,Hibernate,Orm,Hql,如何在HQL中编写不存在的查询?我正在尝试获取一个HQL not exists查询,该查询返回与此Oracle SQL查询相同的结果: 挑选* 从a学校 如果不存在,请选择1 来自学生b 其中B.SCHOOL\u ID=a.ID 和B.STATUS_ID不在0,1,2,3,4中 我的映射文件如下: 我在School.hbm.xml文件中尝试了以下标记 我得到了这个堆栈跟踪 org.springframework.beans.factory.BeanCreationException: Error

如何在HQL中编写不存在的查询?我正在尝试获取一个HQL not exists查询,该查询返回与此Oracle SQL查询相同的结果:

挑选* 从a学校 如果不存在,请选择1 来自学生b 其中B.SCHOOL\u ID=a.ID 和B.STATUS_ID不在0,1,2,3,4中 我的映射文件如下:

我在School.hbm.xml文件中尝试了以下标记

我得到了这个堆栈跟踪

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in class path resource [applicationContext.xml]: Invocation of init method failed; nested exception is java.lang.NullPointerException
Caused by: java.lang.NullPointerException
        at org.hibernate.hql.ast.HqlParser.negateNode(HqlParser.java:117)
        at org.hibernate.hql.antlr.HqlBaseParser.negatedExpression(HqlBaseParser.java:2378)
        at org.hibernate.hql.antlr.HqlBaseParser.logicalAndExpression(HqlBaseParser.java:2331)
        at org.hibernate.hql.antlr.HqlBaseParser.logicalOrExpression(HqlBaseParser.java:2296)
        at org.hibernate.hql.antlr.HqlBaseParser.expression(HqlBaseParser.java:2082)
        at org.hibernate.hql.antlr.HqlBaseParser.logicalExpression(HqlBaseParser.java:1858)
        at org.hibernate.hql.antlr.HqlBaseParser.whereClause(HqlBaseParser.java:454)
        at org.hibernate.hql.antlr.HqlBaseParser.queryRule(HqlBaseParser.java:708)
        at org.hibernate.hql.antlr.HqlBaseParser.selectStatement(HqlBaseParser.java:296)
        at org.hibernate.hql.antlr.HqlBaseParser.statement(HqlBaseParser.java:159)
        at org.hibernate.hql.ast.QueryTranslatorImpl.parse(QueryTranslatorImpl.java:248)
        at org.hibernate.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:157)
        at org.hibernate.hql.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:111)
        at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:77)
        at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:56)
        at org.hibernate.engine.query.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:72)
        at org.hibernate.impl.SessionFactoryImpl.checkNamedQueries(SessionFactoryImpl.java:402)
        at org.hibernate.impl.SessionFactoryImpl.<init>(SessionFactoryImpl.java:352)
有人能告诉我我做错了什么吗

谢谢大家!

试试这个:

from School s where (select count(st) from Student st
  where st.school_id=s.id and st.status.id not in (0,1,2,3,4)) = 0

您的命名查询无效。学校id不是学生实体的属性,这会阻止实例化SessionFactory。您需要考虑对象和关联,而不是列。请尝试以下方法:

from School as s
where not exists (
  from Student as st
  where st.school = s
  and st.status.id not in (0,1,2,3,4)
)
工具书类 Hibernate核心参考指南
仅供参考,NullPointerException似乎是因为我的子查询需要括号。