Criteria qyery for below SQL query? Both inner and outer query are for same table but for different rows

StackOverflow https://stackoverflow.com/questions/18566896

  •  27-06-2022
  •  | 
  •  

Question

Select "answer" 
  from 'Details' 
 where "question" like 'childimmunization'
   AND "subject" IN (select "subject"
                   from 'Details' 
                   where "question" like 'childgender'
                     AND "answer" = "M" and "test" ="1");

Table structure is :

Subject Test    Survey  Question              answer
----------------------------------------------------
rahul   1       one     childimmunization     Yes
rahul   1       one     childgender           M
Jyothi  1       one     childimmunization     No
Jyothi  1       one     childgender           F
Chikku  1       one     childimmunization     No
Chikku  1       one     childgender           M
Was it helpful?

Solution

You can use Hibernate DetachedCriteria to express a subquery. This Hibernate doc will give you a good idea about the topic.

Here is how you can write your SQL query by using Hibernate Criteria/DetachedCriteria:

//creates a DetachedCriteria
DetachedCriteria dc = DetachedCriteria.forClass(Details.class);

//restrictions for the sub query
dc.add(Restrictions.like("question", "childgender"));
dc.add(Restrictions.eq("answer", "M"));
dc.add(Restrictions.eq("test", "1"));

//this is what your sub query will return
dc.setProjection(Projections.property("subject"));

//Criteria for Details.class
Criteria criteria = sessionFactory.getCurrentSession().createCriteria(
            Details.class);

//restriction on your Criteria
criteria.add(Restrictions.like("question", "childimmunization"));

//you can add sub queries to your criteria as this
criteria.add(Subqueries.propertyIn("subject", dc));

// and this is result "answer"
criteria.setProjection(Projections.property("answer"));

List list = criteria.list();
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top