いくつかのフィールドを持つクラスがあり、そのうちの1つは子のコレクションです。問題は、子がクラスを一意にすることであり、子ごとに重複を検索する必要があります(最初からクラスにはIDがありません)。
だから私はこのように書いています:
SELECT c
FROM Class c, IN(c.children) c1, IN(c.children) c2, IN(c.children) c3
WHERE c.project='project' AND c1.name='name1' AND c2.name='name2' AND c3.name='name3'
多かれ少なかれ一意のc.projectがある間は正常に機能します。しかし、場合によっては、同じプロジェクト (または null) で大量のデータをインポートする必要があり、検索には 200-300 c で 3-4 の子を持つ 5-6 秒かかることがあります。
何か大きなものを見逃していると思いますが、正確にはわかりません。手伝ってくれませんか。
更新:このクエリは、データベースにそのようなオブジェクトが既にあり、もう1つ追加する必要がない場合に手がかりを与えることができます(私が言うように-最初からIDはありません)。つまり、データベースに同じプロジェクト(プロジェクト!= ID)と同じ子のセットを持つオブジェクトが存在する場合、もう1つ追加する必要はありません。それ以外の場合は、新しいレコードを作成する必要があります。