如HibernateSearch文档中所述:
投影不适用于通过@IndexedEmbedded索引的集合或地图
因此,在您的情况下,尝试
jobSeekerSkills.skills.skill通过
jobSeekerSkills进行索引,并在上进行投影
@IndexedEmbedded不是一个好主意。
我想指出的是,由于您仅在数字字段上执行关键字查询,因此最好只使用Hibernate ORM进行经典的JQPL / SQL查询。
无论如何,如果出于某种原因您 真的 想使用Hibernate
Search,那么从查询中判断,您无需在集合上进行投影。相反,只需
@IndexedEmbedded(includePaths ="includePaths")向的
jobSeeker属性添加
JobSeekerSkills,然后重新处理查询以将实体的索引作为目标
JobSeekerSkills:
FullTextSession fullTextSession = Search.getFullTextSession(session); fullTextSession.createIndexer().startAndWait(); QueryBuilder qb = fullTextSession.getSearchFactory().buildQueryBuilder().forEntity(JobSeeker.class).get(); Query query = null; for (String string : skills) { query = qb.keyword().onField("skills.skillIdPk").matching(Integer.parseInt(string)).createQuery(); } org.hibernate.search.FullTextQuery query1 = fullTextSession.createFullTextQuery(query, JobSeeker.class); query1.setProjection("jobSeeker.jobSeekerId", "skills.skill"); List results = query1.list(); for (int i = 0; i < results.size(); i++) { Object[] object = (Object[]) results.get(i); System.out.println(object[0]); System.out.println(object[1]); } // List<Skills> authorName1 = (List<Skills>) firstResult[1]; // System.out.println(authorName1); return results;
注意:
includePaths新上的on
@IndexedEmbedded仅是必需的,因为您已经
@IndexedEmbedded在关联(
JobSeeker.jobSeekerSkills)的反面了;它避免了无限递归(JobSeeker.jobSeekerSkills.jobSeeker.jobSeekerSkills.jobSeeker.jobSeekerSkills…)。如果删除
@IndexedEmbeddedon
JobSeeker.jobSeekerSkills,则也可以删除
includePathson
@IndexedEmbedded。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)