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

表结构是:

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
4

1 回答 1

2
  1. 将两行或多行的值收集到单行的列中的最合适的 SQL 方法是将表与自身连接(一次或多次)。它比使用子查询更简单、更方便。
    因此,如果您可以在 Hibernate 中创建从Deatilsto的循环关联Details- 这将是最简单的解决方案。但我想这是不可能的,因为 Hibernate 已经知道在 join 中使用同一实体两次的问题(和打开的任务) - 详细信息在这里这里

  2. 但是根据这个答案,您仍然可以尝试使用 HibernateDetachedCriteria作为子查询来制作非常类似于原始 SQL 的内容。

我将尝试建议此代码,但未经测试:

DetachedCriteria subjectsWithBoys = DetachedCriteria.forClass(Details.class)
  .setProjection(Property.forName("subject"))
  .add(Restrictions.eq("question", "childgender"))
  .add(Restrictions.eq("answer", "M"))
  .add(Restrictions.eq("test", "1"));

Criteria criteria = getSession().createCriteria(Details.class)
  .setProjection(Property.forName("answer"))
  .add(Property.forName("subject").in(subjectsWithBoys))
  .add(Restrictions.eq("question", "childimmunization"))
  .add(Restrictions.eq("test", "1"));

希望您能轻松地使用它,并且不会在 Hibernate 中因为如此琐碎的任务而遇到另一个未解决的问题。

于 2013-09-01T20:50:20.420 回答