当前位置: 首页 > 知识库问答 >
问题:

Hibernate HQL:如何选择父实体当且仅当所有子实体具有相同值的属性?

祝俊
2023-03-14

我想我有两个实体具有双向的@OneToMany@ManyToOne关联:

家长——有很多--

我想选择Parent实体,其中所有关联的Child实体都将x设置为true
例如,如果我有以下数据

起源:

+-------+       
|   ID  | 
+-------+       
|   1   |  
+-------+       
|   2   |  
+-------+ 

孩子:

+-------+-------+-------+       
|   ID  | P.ID  |   x   |
+-------+-------+-------+       
|   1   |   1   | true  |
+-------+-------+-------+       
|   2   |   1   | true  |
+-------+-------+-------+
|   3   |   2   | true  |
+-------+-------+-------+       
|   4   |   2   | false | 
+-------+-------+-------+  

我想要一个HQL或JPQL查询,它返回id1的实体。

知道吗?

共有2个答案

焦阎宝
2023-03-14

可以像这样使用jpql查询

select p from Parent p where p.children is not empty and not exists(
    select 1 from p.children c where c.x=false)

实体:

@Entity
public class Parent {
   //...

   @OneToMany
   List<Child> children;

   //...
}
宗政招
2023-03-14

您可以执行以下查询:

from parent p where p.ID in (select c.parent from child c where c.x=true) and p.ID not in (select c.parent from child c where c.x = false)
 类似资料:
  • 我在两个实体之间有双向或父/子关系: 我要选择没有的所有或的属性设置为的。 我使用的是。

  • 我正在尝试为实体创建一个域模型(聚合),该实体包含子实体,并且可以有父实体。我们有实体包。我们可以把包裹分成更小的包裹(儿童)。每个分开的包都有一个父包。域的哪个部分应该包含域逻辑:聚合还是域服务?e、 g.聚合包有一个方法 分包还是原包?解决这个问题的正确方法是什么? 我希望我的域模型被ddd(应用程序和基础设施)的其他部分保持干净和幂等

  • 我的类有两个子类:和。子类有一个单数PK,其上的映射起作用。问题是我不知道如何将它映射到ParentHobby类上,这个类有一个复合PK。 家长: @entity@table(name=“parent_hobby”)公共类ParentHobby{ ParentHobBypk: 我在编译时遇到的例外情况是: 当子实体具有复合主键时,如何在父实体中定义@OneTomany关系? 相似: @OneTom

  • 问题内容: 我的班级有两个子班级: 和。Child类具有单个PK,并且其上的映射有效。问题是我不知道如何将其映射到具有复合PK的ParentHobby类。 上级: 儿童: 家长爱好: @Entity @Table(name =“ PARENT_HOBBY”)公共类ParentHobby { ParentHobbyPK: 我在编译时遇到的异常是: 当子有复合主键时,如何在父实体中定义@OneToMa

  • 问题内容: 我有根实体及其单一关联。 当我获取实体时,我需要热切地获取,但是只有它的3个属性:userId,firstName,lastName。 现在,我的条件查询是: 接下来,我得到了sql语句,该语句仅选择投影列表中指定的3个属性。但是它不会选择根实体的任何属性。生成的查询是: 该查询不起作用,因为它返回了五个为空的。五个映射是因为有五行匹配where条件。我创建了简单的sql查询,它工作正

  • 问题内容: 我有一张桌子,像这样: 我想选择具有相同基因座和染色体的所有行。例如,第3行和第4行。一次可能有2个以上,并且它们可能不是按顺序排列的。 我尝试了这个: 但是,即使重复,它总是返回第3行,从不返回第4行。我想我缺少明显而简单的东西,但我茫然。 有人可以帮忙吗? 问题答案: 您需要了解,当您在查询中包含内容时,您是在告诉SQL合并行。您将为每个唯一值获得一行。在随后过滤这些组。通常,您可