Tôi đang cố gắng viết truy vấn JPQL để trả về các thực thể mà tất cả các thực thể đó có một thuộc tính nằm trong tập các giá trị. Nó tương tự như những câu dưới đây, nhưng nơi có nhiều giá trị có thể:Truy vấn JPA - JPQL để chọn cha mẹ có TẤT CẢ trẻ em với một thuộc tính trong một SET giá trị
Hibernate query - How to select those parents that have ALL the children matching a value?
Dưới đây là một ví dụ thực tế chuyển thể từ câu hỏi trên ...
Tôi muốn chọn những người cha có TẤT CẢ con cái của họ là người tóc vàng hay tóc đỏ. Nếu chỉ có một là tóc đen cha không được chọn.
tôi đã cố gắng thích nghi khác nhau của câu trả lời cho câu hỏi trên như ...
select p from parent where all(parent.children.haircolor) IN ('blonde','redhead')
hoặc
select p from parent where parent.children.haircolor ALL IN ('blonde','redhead')
Không khá mong đợi những công việc, nhưng cũng đáng thử. Cho đến nay chỉ có một điều HAS đã làm việc ...
select p from parent
where 0 = (select count(c) from p.children c
where c.haircolor NOT IN ('blonde','redhead')
)
Tôi thực sự không muốn chạy truy vấn đếm cho mỗi hàng, nhưng tôi không thấy cơ chế tốt hơn. Điều này không hoàn toàn làm tôi ngạc nhiên vì tôi không thể nghĩ ra cách nào khác để viết điều này trong SQL đơn giản, nhưng tôi cũng không phải là một guru. Có cách nào hiệu quả hơn để thực hiện việc này không?
Việc bổ sung thông số thu thập đã được lên kế hoạch, nhưng điều này chỉ thực hiện một phép nối bên trong điển hình. Nó sẽ trả về các thực thể trong đó BẤT K of trẻ em nào phù hợp với bộ sưu tập. Vấn đề ở đây là cần TẤT CẢ trẻ em để phù hợp trước khi phụ huynh được trả lại. – nfdavenport