存在子句的hibernate标准

我无法找到解决问题的方法,这似乎很容易。 假设有2个实体类:

class A {
   Set<B> bs;
}

class B {
   String text;
}

如何创建一个返回所有包含至少一个满足给定条件的B实体(如b.text ='condition')的A的条件查询?


我认为这个链接可能很有用: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)

你这样做的方式是使用“exists”子查询,如下所示:

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();

瞧,结果将包含两个PizzaOrders!“

链接地址: http://www.djcxy.com/p/37109.html

上一篇: hibernate criteria with exists clause

下一篇: Criteria and collections