如果域对象的hasmany
关联包含给定列表中的所有元素,那么我正在尝试获取域对象列表。
class Patient {
static hasMany = [symptoms:Symptom]
}
class Symptom {
}
寻找与containsAll()
类似但可以在标准中使用的东西会非常棒。但我自己找不到。我希望标准可以让我这样做:
Patient.createCriteria().list {
'containsAll'('symptoms',listOfSymptoms)
}
答案 0 :(得分:0)
这可以在HQL(更简洁)中完成,是的,Criteria中没有containsAll
功能。
Patient.executeQuery(
"FROM Patient p WHERE p IN
(SELECT s.patient from Symptom s WHERE s.id = :id1)
AND p IN
(SELECT s.patient from Symptom s WHERE s.id = :id2)
AND p IN
(SELECT s.patient from Symptom s WHERE s.id = :id3)",
[id1: 1, id2: 2, id3: 3])
答案 1 :(得分:0)
找到了没有条件或hql的方法。但我不知道当Patient表有数百万行数据时会发生什么。它可能会变得丑陋。
Patient.list().findAll{
it.symptoms.containsAll(listOfSymptoms)
}
或id可以像这样使用:
Patient.list().findAll{
it.symptoms*.id.containsAll(listOfSymptomIds)
}