【问题标题】:Can I use JPA to filter parent by number of children我可以使用 JPA 按子级过滤父级吗
【发布时间】:2025-12-30 08:25:12
【问题描述】:

我有一个父类,其属性 children 作为一对多关系。在构建此示例时,我假设一个孩子只能有一个父母:-)

public class Parent {

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(updatable = false, nullable = false, insertable = false, unique = true)
private Long id;

private String name;

@OneToMany(mappedBy = "parent")    
private Set<Child> children;

}

public class Child {

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(updatable = false, nullable = false, insertable = false, unique = true)
private Long id;


private String name;

@ManyToOne
private Parent parent;

}

但现在我想只过滤例如有 2 个孩子的父母。 我可以使用什么 JPA 功能来实现它?

一位同事建议为父级添加一个 childrenCounter。但我不喜欢这种可能性,因为每次更改父站点和/或子站点上的某些内容时,我都必须更新此计数器。

【问题讨论】:

  • 根据数据库的大小,您可以使用streams(例如resultSet.streams.filter(p -&gt; p.children.size == 2))进行过滤。以防万一返回的只是一个小列表。

标签: hibernate jpa eclipselink jpa-2.0


【解决方案1】:

这很简单。您需要以下 JPQL 查询:

select p
from Parent p
where size(p.children) = 2

【讨论】: