"where exists" in Hibernate HQL 在Hibernate HQL中的"where exists"

20 浏览
0 Comments

"where exists" in Hibernate HQL 在Hibernate HQL中的"where exists"

我该如何在HQL中编写一个“not exists”查询?我试图获得一个HQL的not exists查询,返回与此Oracle SQL查询相同的结果:

    select *
    from SCHOOL a
    where not exists (select 1
    from STUDENT b
    where B.SCHOOL_ID=a.id
    and B.STATUS_ID not in (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.(HQLQueryPlan.java:77)
        at org.hibernate.engine.query.HQLQueryPlan.(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.(SessionFactoryImpl.java:352)

有人能告诉我我在做什么错吗?

谢谢!

0