我正在尝试在休眠“标准”(不在 hql 中)中进行查询,但我没有得到做什么或使用什么。
select * from foo where column1 = 8 and column2 not in (
select column2 from foo where column1 = 11
)
我用两个不同的查询做了它,然后使用 Java 函数来获得结果,但我需要一个单一的标准查询。
我正在尝试在休眠“标准”(不在 hql 中)中进行查询,但我没有得到做什么或使用什么。
select * from foo where column1 = 8 and column2 not in (
select column2 from foo where column1 = 11
)
我用两个不同的查询做了它,然后使用 Java 函数来获得结果,但我需要一个单一的标准查询。
模知道你的实际实体映射是什么(这当然是完全未经测试的),它可能通过类似的东西来解决
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 属性。
创建一个标准选择所有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)));