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
Post a Comment