2012-07-26 128 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