来自简单SQL查询的Hibernate条件查询(带嵌套子查询)

时间:2012-09-27 11:11:02

标签: hibernate criteria hibernate-criteria

我正在尝试在hibernate“条件”(不是在hql中)进行查询,但我不知道该做什么或使用什么。

select * from foo where column1 = 8 and column2 not in (
    select column2 from foo where column1 = 11 
)

我使用两个不同的查询,然后使用Java函数来获取结果,但我需要一个单一的标准查询。

2 个答案:

答案 0 :(得分:7)

Modulo知道你的实际实体映射是什么(这当然是彻底未经测试的),它很可能通过类似的东西来解决

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属性。

答案 1 :(得分:0)

创建条件选择所有Criteria cr = session.createCriteria(Your.class); List list = cr.list(); 然后你可以为它添加限制,即第1列= 8等,如下所示:cr.add(Restrictions.eq("YourCondition", YourCondition));

最后,您可以提供这样的not in子句:crit.add(Restrictions.not(Restrictions.in("YourNotInCondition", YourNotInCondition)));