2016-11-30 5 views
1

하위 항목 속성이있는 상위 클래스가 일대 다 관계로 있습니다. 이 예제가 구축 될 때, 나는 한 아이가JPA를 사용하여 하위 항목 수를 기준으로 상위 항목을 필터링 할 수 있습니까?

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; 

} 

:-) 단 하나의 부모를 가질 수 있다고 가정하지만 지금은 단지 예를 두 어린이가 부모를 필터링하고 싶습니다. 이것을 구현하는 데 사용할 수있는 JPA 기능은 무엇입니까?

동료가 childrenCounter를 부모에게 추가하도록 제안했습니다. 그러나 부모님 및/또는 자녀 사이트에서 무언가를 바꿀 때마다이 카운터를 업데이트해야하기 때문에 나는이 가능성을 좋아하지 않습니다.

+0

데이터베이스의 크기를 따라, 당신은'streams'를 사용하여 필터링 할 수 있습니다 (예를 들어'resultSet.streams.filter (P -> p.children.size == 2)') . 단지 작은 목록이 반환 된 경우에 대비해. – Tom

답변

2

간단합니다. 다음과 같은 JPQL 쿼리가 필요합니다

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