1

hasmanyこんにちは、ドメイン オブジェクトの関連付けに特定のリストのすべての要素が含まれている場合、ドメイン オブジェクトのリストを取得しようとしています。

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

containsAll()に似ているが、基準で使用できるものを探すのは素晴らしいことです。しかし、私はそれを自分で見つけることができません。私は基準が私にこれをさせてくれることを望んでいました:

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

2 に答える 2

0

基準や本社なしでそれを行う方法を見つけました。しかし、患者テーブルに何百万行ものデータがあるとどうなるかわかりません。それは醜くなるかもしれません。

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 に答える