栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何在hibernate Lucene搜索中使用投影

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何在hibernate Lucene搜索中使用投影

如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…)。如果删除
@IndexedEmbedded
on
JobSeeker.jobSeekerSkills
,则也可以删除
includePaths
on
@IndexedEmbedded



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/405549.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号