1

您好,如果域对象的hasmany关联包含给定列表中的所有元素,我正在尝试获取域对象列表。

class Patient {
   static hasMany = [symptoms:Symptom]
}
class Symptom {
}

寻找类似于containsAll()但可以在标准中使用的东西会很棒。但我自己找不到。我希望标准能让我这样做:

Patient.createCriteria().list {
    'containsAll'('symptoms',listOfSymptoms)
}
4

2 回答 2

0

找到了一种没有标准或 hql 的方法。但是我不知道当 Patient 表有数百万行数据时会发生什么。可能会变得丑陋。

Patient.list().findAll{
    it.symptoms.containsAll(listOfSymptoms)
}

或者 id 可以这样使用:

Patient.list().findAll{
    it.symptoms*.id.containsAll(listOfSymptomIds)
}
于 2013-04-28T15:51:03.273 回答
0

这可以在 HQL 中完成(不那么冗长),是containsAll的,Criteria 中没有功能。

    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])
于 2013-04-26T19:10:47.763 回答