Tüm varlık öğelerinin bir değer kümesinde sahip olduğu öğelerin döndürülmesi için JPQL sorgusu yazmayı deniyorum. JPA Sorgu - Değerler kümesinde TÜM çocuklara sahip olan ebeveynleri olan ebeveynleri seçmek için JPQL
ben sahip olan babalar seçmek istediğiniz ... İşteHibernate query - How to select those parents that have ALL the children matching a value?
yukarıdaki soruya uyarlanan pratik bir örnektir: Aşağıdaki soruya benzer, ancak birden olası değerler olduğu yerde TÜM çocukları ya sarışın ya da kızıl olan. Sadece biri siyah saçlıysa baba seçilmez.Oldukça işime bu beklemiyorduk ...
select p from parent where all(parent.children.haircolor) IN ('blonde','redhead')
veya
select p from parent where parent.children.haircolor ALL IN ('blonde','redhead')
yukarıdaki soru gibi cevap çeşitli uyarlamalar çalıştı, ama denemeye değer ettik. Şimdiye kadar tek bir şey
select p from parent
where 0 = (select count(c) from p.children c
where c.haircolor NOT IN ('blonde','redhead')
)
Gerçekten her satır için böyle bir sayım sorgusu çalıştırmak zorunda tercih ediyorum ... çalışmış HAS, ama daha iyi bir mekanizma görmüyorum. Bu beni tamamen şaşırtmadı çünkü bunu basit bir SQL'de yazmak için başka bir yol düşünemiyorum, ama ben de orada bir guru değilim. Bunu gerçekleştirmenin daha verimli bir yolu var mı?
Koleksiyon parametresinin eklenmesi planlandı, ancak bu yalnızca tipik bir iç birleştirmeyi gerçekleştiriyor. Çocuklardan HERHANGİ koleksiyonun eşleştiği yerlere geri dönecektir. Buradaki sorun, ebeveynlerin geri gönderilmesinden önce TÜM çocukların eşleşmesi gerekiyor. – nfdavenport