java - 具有存在子句的 hibernate 条件

标签 java hibernate criteria

我找不到看似简单的问题的解决方案。假设有 2 个实体类:

class A {
   Set<B> bs;
}

class B {
   String text;
}

如何创建一个条件查询来返回所有 A,其中包含至少一个满足给定条件的 B 实体(如 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)

您这样做的方式是使用“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!"

关于java - 具有存在子句的 hibernate 条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23519115/

相关文章:

java - spring @Query 注释中的 HQL 查询

hibernate - SELECT bla1,bla2 FROM foo的条件

java - Hibernate Criteria 将两个表与第二个表上的条件连接起来,结果是第一个表

java - entitymanager 的正确使用方法是什么

数据库差异工具

java hibernate 标准

java - 我可以在 Java 泛型中传递复杂类型结构吗?

java - 如何使用 JCloud 列出 SWIFT 中的可用容器?

java - Apache Commons CSV 库中封装的 token 和分隔符之间的字符无效

sql - hibernate -HQL连接许多子句