【问题标题】:Equivalent Criteria query for below SQL query?以下 SQL 查询的等效条件查询?
【发布时间】:2013-09-04 19:00:29
【问题描述】:
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

【问题讨论】:

  • 这不会总是导致answer = M 吗?
  • 不,在“答案”中,我想分别为男性(“M”)和女性(“F”)获得“是”或“否”。但现在我只需要男性,所以在子查询中我将条件设为 answer="M"。
  • 您在外部查询中再次选择答案。
  • 是的。内部查询和外部查询都在同一个表中,有 2 个不同的行。在内部查询中,我得到主题名称(性别为男性的人名)现在只有选定的人我需要回答(是或否),这是另一行。
  • 查询的问题:(1)question like 'X'question like 'X%' 不一样,完全是question = 'X',(2)您没有在外部查询中声明test=1,因此,当表格中存储多个测试时,您可能会混淆结果。

标签: sql hibernate-criteria


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

  2. 但根据this answer,您仍然可以尝试使用 Hibernate DetachedCriteria 作为子查询来制作非常类似于原始 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 中因为如此琐碎的任务而遇到另一个未解决的问题。

【讨论】:

  • 我不需要 SQL 查询,我的 sql 查询需要 Equivalent Criteria 查询。请注意,我的 SQL 查询工作正常,没有两个表,只有一个表。在同一张表上,我编写了内部和外部查询。感谢您的答复 。希望您能正确回答我的问题
  • 哦,我怎么会错过hibernate-criteria 标签:) 我已经完全重写了我的答案。顺便说一句,我认为您的原始 SQL 查询存在问题,并且可能只是因为缺乏测试而“工作正常”。
猜你喜欢
  • 1970-01-01
  • 2011-12-16
  • 1970-01-01
  • 1970-01-01
  • 2020-09-24
  • 2014-04-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多