2012-07-26 129 views
0

我有一些類,它有一些字段,其中一個是子類的集合。問題是,孩子讓課程獨特,我必須由孩子搜索重複(從頭班沒有任何ID)。在hibernate中搜索速度很慢

所以我寫水木清華這樣的:

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它工作正常。 但在某些情況下,我必須導入大量的數據與同一項目(或空),然後搜索可能需要5-6秒200-300 c與3-4個孩子。

我錯過了一些很大的東西,但我不知道究竟是什麼。你能幫我麼。

更新: 這個查詢可以給我線索,如果我已經有這樣的對象在數據庫中,並且不需要再添加一個(就像我說的 - 從頭開始​​沒有ID)。 我的意思是 - 如果在數據庫存在對象具有相同的項目(項目!= ID)和相同的兒童組比我不需要再添加一個,否則我需要創建新的記錄。

+0

你能解釋一下你的查詢應該找到什麼嗎?這個查詢的最終目標是什麼? – 2012-07-26 10:10:18

回答

1

假設你不能有兩個孩子與給定父相同的名稱,你可以做這樣的事情:

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

如果返回3個或更多,然後用這些孩子父母已經存在。

+0

有一些問題 - 孩子沒有「姓名」字段。它包含4個使這個父母的孩子獨特的字段。我假設我可以通過散列或連接創建這樣的「名稱」。我將嘗試修改您的解決方案並實施它。謝謝。 – ainlolcat 2012-07-26 12:22:06

+0

在你的問題中,孩子有一個名字?!有問題的 – 2012-07-26 12:30:00

+0

是的,對不起。但實際上它有4個領域。我想我可以在(...)和child.surname中更改child.name(...) – ainlolcat 2012-07-26 12:36:47