dspace - Constructing a where exists subquery with hibernate -


i attempting create following query using hibernate.

select * item  exists (   select 1   metadatavalue mv   mv.dspace_object_id=item.uuid   , text_value='no date' ); 

i having difficulty constructing subquery using hibernate objects.

the following code working me

session session = (session) context.getdbconnection().getsession(); criteria criteria = session.createcriteria(item.class, "item"); criteria.add(restrictions.sqlrestriction("exists (select 1 metadatavalue mv mv.dspace_object_id=this_.uuid , text_value='no date')")); 

i create query hibernate objects.

session session = (session) context.getdbconnection().getsession(); criteria criteria = session.createcriteria(item.class, "item"); detachedcriteria subcriteria = detachedcriteria.forclass(metadatavalue.class); subcriteria.add(???) criteria.add(subqueries.exists(subcriteria)); 

i unsure of proper way reference item.uuid (property name "id") subquery.

if try following

criteria criteria = session.createcriteria(item.class, "item"); detachedcriteria subcriteria = detachedcriteria.forclass(metadatavalue.class,"mv"); subcriteria.add(property.forname("mv.dspace_object_id").eqproperty("item.uuid")); criteria.add(subqueries.exists(subcriteria)); system.out.println("xx" + criteria.list().size()); 

i following error

java.lang.nullpointerexception     @ org.hibernate.loader.criteria.criteriaquerytranslator.getprojectedtypes(criteriaquerytranslator.java:401)     @ org.hibernate.criterion.subqueryexpression.createandsetinnerquery(subqueryexpression.java:152)     @ org.hibernate.criterion.subqueryexpression.tosqlstring(subqueryexpression.java:68)     @ org.hibernate.loader.criteria.criteriaquerytranslator.getwherecondition(criteriaquerytranslator.java:419)     @ org.hibernate.loader.criteria.criteriajoinwalker.<init>(criteriajoinwalker.java:123)     @ org.hibernate.loader.criteria.criteriajoinwalker.<init>(criteriajoinwalker.java:92)     @ org.hibernate.loader.criteria.criterialoader.<init>(criterialoader.java:95)     @ org.hibernate.internal.sessionimpl.list(sessionimpl.java:1604)     @ org.hibernate.internal.criteriaimpl.list(criteriaimpl.java:374)     @ org.dspace.core.test.main(test.java:37) 

[

per recommendations above, used property names rather column names , added projection. resolved issue.

criteria criteria = session.createcriteria(item.class, "item");     detachedcriteria subcriteria = detachedcriteria.forclass(metadatavalue.class,"mv"); subcriteria.add(property.forname("mv.dspaceobject").eqproperty("item.id")); subcriteria.setprojection(projections.property("mv.dspaceobject")); criteria.add(subqueries.exists(subcriteria)); system.out.println("xx" + criteria.list().size()); 

Comments