Note that there are some explanatory texts on larger screens.

plurals
  1. PO"where exists" in Hibernate HQL
    text
    copied!<p>How can I write a "not exists" query in HQL? I am trying to get an HQL not exists query which returns the same results as this Oracle SQL query:</p> <pre><code>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)) </code></pre> <p>My mapping files are below:</p> <p> </p> <pre><code> &lt;!-- primary key ommitted --&gt; &lt;set name="students" cascade="all" fetch="select" lazy="false" &gt; &lt;key column="SCHOOL_ID" /&gt; &lt;one-to-many class="com.companyname.Student" /&gt; &lt;/set&gt; &lt;/class&gt; </code></pre> <p> </p> <pre><code> &lt;!-- primary key ommitted --&gt; &lt;many-to-one name="school" column="SCHOOL_ID" class="com.companyname.School" fetch="join" lazy="false"/&gt; &lt;many-to-one name="status" class="com.companyname.Status" column="STATUS_ID" /&gt; &lt;/class&gt; </code></pre> <p> </p> <p>I tried the following tag in my School.hbm.xml file</p> <pre><code>&lt;query name="myQuery"&gt; &lt;![CDATA[ from School s where not exists from Student st where st.school_id=s.id and st.status.id not in (0,1,2,3,4) ]]&gt; &lt;/query&gt; </code></pre> <p>and I got this stack trace</p> <pre><code>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.&lt;init&gt;(HQLQueryPlan.java:77) at org.hibernate.engine.query.HQLQueryPlan.&lt;init&gt;(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.&lt;init&gt;(SessionFactoryImpl.java:352) </code></pre> <p>Can somebody let me know what I'm doing wrong?</p> <p>Thank you!</p>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload