2016-11-30 11 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; 

} 

Но теперь я хотел бы, чтобы фильтровать только родителей, которые имеют, например, 2-х детей. Какую функцию JPA я могу использовать для ее реализации?

Коллега предложил добавить childCounter к родительскому. Но мне не нравится эта возможность, потому что мне придется обновлять этот счетчик каждый раз, когда я что-то меняю на родительском и/или дочернем сайтах.

+0

В зависимости размер вашей базы данных, можно фильтровать с помощью 'streams' (например,' resultSet.streams.filter (р -> p.children.size == 2) ') , На всякий случай это небольшой список вернулся. – Tom

ответ

2

Это просто. Вам необходимо следующее JPQL запрос:

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