0

いくつかのフィールドを持つクラスがあり、そのうちの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つ追加する必要はありません。それ以外の場合は、新しいレコードを作成する必要があります。

4

1 に答える 1

1

特定の親に対して同じ名前の 2 人の子供を持つことができないと仮定すると、次のようにすることができます。

select count(child.id) from Parent p inner join p.children child
where p.project = 'project' and child.name in ('name1', 'name2', 'name3')

3 つ以上が返された場合、これらの子を持つ親は既に存在します。

于 2012-07-26T11:46:38.430 に答える