具有存在子句的休眠条件
我找不到一个看似容易的问题的解决方案。假设有 2 个实体类:
class A {
Set<B> bs;
}
class B {
String text;
}
如何创建一个条件查询,返回包含至少一个满足给定条件的B实体的所有A(如b.text = 'condition')?
我找不到一个看似容易的问题的解决方案。假设有 2 个实体类:
class A {
Set<B> bs;
}
class B {
String text;
}
如何创建一个条件查询,返回包含至少一个满足给定条件的B实体的所有A(如b.text = 'condition')?
我认为这个链接可能很有用:http://mikedesjardins.net/2008/09/22/hibernate-criteria-subqueries-exists/
它包含以下有关如何创建 n 个存在条件的示例:
“你真正想做的是获得所有存在相关小披萨的披萨订单。换句话说,您尝试模拟的 SQL 查询是
SELECT *
FROM PIZZA_ORDER
WHERE EXISTS (SELECT 1
FROM PIZZA
WHERE PIZZA.pizza_size_id = 1
AND PIZZA.pizza_order_id = PIZZA_ORDER.pizza_order_id)
执行此操作的方法是使用“存在”子查询,如下所示:
Criteria criteria = Criteria.forClass(PizzaOrder.class,"pizzaOrder");
DetachedCriteria sizeCriteria = DetachedCriteria.forClass(Pizza.class,"pizza");
sizeCriteria.add("pizza_size_id",1);
sizeCriteria.add(Property.forName("pizza.pizza_order_id").eqProperty("pizzaOrder.pizza_order_id"));
criteria.add(Subqueries.exists(sizeCriteria.setProjection(Projections.property("pizza.id"))));
List<pizzaOrder> ordersWithOneSmallPizza = criteria.list();
瞧,结果将包含两个披萨订单!