在hibernate中搜索集合非常慢

在hibernate中搜索集合非常慢,hibernate,search,Hibernate,Search,我有一个类,它有一些字段,其中一个字段是collectionofchild。问题是,子类使类唯一,我必须从类并没有任何ID的开始按子类搜索重复项 所以我这样写smth: 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'

我有一个类,它有一些字段,其中一个字段是collectionofchild。问题是,子类使类唯一,我必须从类并没有任何ID的开始按子类搜索重复项

所以我这样写smth:

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'
select count(child.id) from Parent p inner join p.children child
where p.project = 'project' and child.name in ('name1', 'name2', 'name3')
当您有或多或少独特的c项目时,它工作得很好。 但在某些情况下,我必须使用相同的项目或null导入大量数据,然后在200-300 c上搜索可能需要5-6秒,有3-4个子项

我想我错过了一些重要的东西,但不知道具体是什么。你能帮帮我吗

更新: 如果我已经在数据库中有这样的对象,并且不需要再添加一个,如我所说,这个查询可以为我提供线索-从一开始就没有ID。
我的意思是-如果数据库中存在具有相同项目的对象=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'
select count(child.id) from Parent p inner join p.children child
where p.project = 'project' and child.name in ('name1', 'name2', 'name3')

如果返回3或更多,则具有这些子级的父级已存在

你能解释一下你的查询结果吗?此查询的最终目标是什么?存在一些问题-子项没有名称字段。它包含4个字段,使子项对此父项唯一。我假设我可以通过散列或连接创建这样的名称。我将尝试修改您的解决方案并实施它。谢谢。在你的问题中,孩子有名字吗?!是的,对不起。但实际上它有4个字段。我想我可以把child.name改成。。。还有孩子,姓…不,你不能这么做。这是不对的。您可以在“name1surname1”、“name2surname2”、“name3surname3”中使用带有特定分隔符的连接:和child.name | | | | child.姓氏。我使用了更快的方法,但搜索速度仍然较慢。我使用的查询类似于从请求r中选择r,其中r.profileID=?1和r.caseSensitive=false,r.usewandcards=false和r.criteriaHash=-249414680查询时间:157