从简单SQL查询(带嵌套子查询)执行Hibernate条件查询

从简单SQL查询(带嵌套子查询)执行Hibernate条件查询,hibernate,criteria,hibernate-criteria,Hibernate,Criteria,Hibernate Criteria,我试图在hibernate条件中进行查询,而不是在hql中,但我不知道该做什么或使用什么 从foo中选择*,其中column1=8,column2不在 从foo中选择column2,其中column1=11 我使用了两个不同的查询,然后使用Java函数获得结果,但我需要一个单一的条件查询。创建一个条件选择所有条件cr=session.createCriteriaYour.class;List=cr.List; 然后您可以向其中添加限制,即第1列=8等:cr.addRestrictions.eqY

我试图在hibernate条件中进行查询,而不是在hql中,但我不知道该做什么或使用什么

从foo中选择*,其中column1=8,column2不在 从foo中选择column2,其中column1=11
我使用了两个不同的查询,然后使用Java函数获得结果,但我需要一个单一的条件查询。

创建一个条件选择所有条件cr=session.createCriteriaYour.class;List=cr.List; 然后您可以向其中添加限制,即第1列=8等:cr.addRestrictions.eqYourCondition,YourCondition


最后,您可以提供如下not in子句:crit.addRestrictions.notRestrictions.inYourNotInCondition,YourNotInCondition

模知道实际的实体映射是什么,当然这是完全未经测试的,它很可能通过类似

Session hibernateSession = ... (however you get it).

DetachedCriteria d = DetachedCriteria.forClass(Foo.class)
      .add(Restrictions.eq("column1", 11))
      .setProjection(Projections.property("column2"));

Criteria criteria = hibernateSession.createCriteria(Foo.class)
      .add(Restrictions.eq("column1", 8))
      .add(Subqueries.propertyNotIn("column2", d));

List<Foo> result = criteria.list();

这几乎肯定需要调整,因为column1和column2是sql字段名,这些地方需要的是java属性。

我是这样做的,但对于第二个条件,我没有得到适当的解决方案。您是否尝试将限制嵌套在not in中?如果您有合适的位置,我可以找到它或看到至少一个示例,我以前没有尝试过任何嵌套,如果我确实找到了什么,我会让你知道的。Hibernate标准通常是用本机SQL编写的,但不是用HQL编写的。而且它也只包含WHERE.jubinPatel之后的内容,因为这似乎是你真正想问的问题,所以你应该关闭并删除该问题,因为这是一个重复的问题。谢谢你的建议,我尝试了,但我做不到。是的,你还没有足够的代表。你可以做两件事:1编辑问题,只说它是重复的,请关闭它,2打开一个问题,要求删除该问题。或者,如果你得到15个代表,你可以为主持人标记该问题。该查询与上一个问题不完全相同。我怀疑这里有一个输入错误,您可能需要更正。