简体   繁体   English

带有exists子句的hibernate条件

[英]hibernate criteria with exists clause

I cannot find a solution to a problem that seems to be easy. 我无法找到一个容易解决的问题的解决方案。 Say there are 2 entity classes: 假设有2个实体类:

class A {
   Set<B> bs;
}

class B {
   String text;
}

How to create a criteria query that returns all A's that contains at least one B entity which fulfills a given condition (like b.text = 'condition')? 如何创建一个条件查询,返回包含至少一个满足给定条件的B实体的所有A(如b.text ='condition')?

I think this link can be useful: http://mikedesjardins.net/2008/09/22/hibernate-criteria-subqueries-exists/ 我认为这个链接很有用: http//mikedesjardins.net/2008/09/22/hibernate-criteria-subqueries-exists/

It contains the following example about how create n exists criteria: 它包含以下关于create n exists条件的示例:

"What you're really trying to do is to obtain all Pizza Orders where an associated small pizza exists. In other words, the SQL query that you're trying to emulate is “你真正要做的就是获得所有相关小比萨存在的比萨订单。换句话说,你试图模仿的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)

The way that you do that is by using an “exists” Subquery, like this: 你这样做的方法是使用“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();

And voila, the result will contain two PizzaOrders!" 瞧,结果将包含两个PizzaOrders!“

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM