存在子句的hibernate标准 [英] hibernate criteria with exists clause

查看:122
本文介绍了存在子句的hibernate标准的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我找不到解决方案,看起来很容易。假设有2个实体类:

  class A {
Set< B> BS;
}

class B {
String text;

$ / code>

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

解决方案

我认为这个链接可以是有用的:
http://mikedesjardins.net/2008/09/22/hibernate-criteria-subqueries-exists/



它包含以下关于如何创建n存在条件的示例:



您真正想要做的是获取所有Pizza Orders换句话说,你试图模拟的SQL查询是:

$ p $ 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); 
Detache dCriteria 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))));
列表< pizzaOrder> ordersWithOneSmallPizza = criteria.list();

瞧,结果会包含两个PizzaOrders!


I cannot find a solution to a problem that seems to be easy. Say there are 2 entity classes:

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')?

解决方案

I think this link can be useful: http://mikedesjardins.net/2008/09/22/hibernate-criteria-subqueries-exists/

It contains the following example about how create n exists criteria:

"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

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:

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!"

这篇关于存在子句的hibernate标准的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆