如何在 Hibernate-search 中索引继承的字段?

亚历克科尔内霍

我在 java jpa Hibernate-search 应用程序中工作,我知道 Hibernate-search 自动索引实体中的每个 @Id 注释。问题是我有一个包含@Id 注释的“主域”类,然后我有另一个继承“主域”的类,然后似乎是 Hibernate 搜索无法识别继承的 @Id 字段。

这是我的主域类。

@MappedSuperclass
@Inheritance(strategy = InheritanceType.JOINED)
public abstract class MasterDomain<Key extends Object> implements Serializable
{
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Key id;
}

我有一个继承这个类的“语言”类:

@Indexed
@Entity
public class Language extends MasterDomain<Long>{

    @Field
    private String name;
}

最后,我有另一个名为“LanguageRelation”的类,它与语言类相关。看起来像:

@Indexed
@Entity
public class LanguageRelation extends MasterDomain<Long>{

   @IndexedEmbedded
   private Language language;
}

因此,当我构建一个 lucene 查询来搜索 LanguageRelation 实体时,我可以按如下语言名称进行搜索:

queryBuilder.keyword().onField("language.name").matching(languageName).createQuery()

但我无法按语言 ID 进行搜索,如下所示:

queryBuilder.keyword().onField("language.id").matching(languageId).createQuery()

上一个查询返回 0 个结果,如您所见,似乎是 Hibernate 搜索无法识别从 MasterDomain 继承的 @Id,有什么建议吗?

更新 1 =>我忘了告诉 MasterDomain 类在我试图执行 Lucene 查询的独立模块中。也许这可能会导致问题?

更新 2这是我如何尝试构建我的 Lucene 查询的完整代码。

FullTextEntityManager fullTextEntityManager
                = Search.getFullTextEntityManager(entityManager);

org.hibernate.search.query.dsl.QueryBuilder queryBuilder = fullTextEntityManager.getSearchFactory()
                .buildQueryBuilder()
                .forEntity(LanguageRelation.class)
                .get();

Long languageId = 29L;
org.apache.lucene.search.Query query = queryBuilder.keyword().onField("language.id").matching(languageId).createQuery();

org.hibernate.search.jpa.FullTextQuery fullTextQuery
                = fullTextEntityManager.createFullTextQuery(query, LanguageRelation.class);
List<LanguageRelation> resultList = fullTextQuery.getResultList();
罗迪埃

我认为问题只是默认情况下未嵌入 ID。

尝试替换这个:

@IndexedEmbedded

有了这个:

@IndexedEmbedded(includeEmbeddedObjectId = true)

然后重新索引您的数据,并再次运行您的查询。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在 Hibernate Lucene Search 中添加多个限制?

如何在 Hibernate Search 6 的几个桥中重用一个字段?

在Hibernate Search中索引数据

Hibernate Search:如何查询父类中的字段?

如何使用Hibernate-Search索引和搜索ENUM类型

如何在Hibernate Search / Lucene中禁用默认评分/增强功能?

Hibernate Search索引单个租户

Hibernate:如何在Hibernate中删除多行?

如何在Hibernate JPA @NamedEntityGraph中引用继承的属性?

如何在Hibernate Search中正确使用@ContainedIn批注?

如何在Hibernate Search中使用Wordnet同义词?

Hibernate Search不为数据库中的项目建立索引

Hibernate Search:用于索引的后台助手

如何在Hibernate批注中创建Tinyint字段

Hibernate Search中具有嵌入式索引的程序化映射导致无法找到字段错误

Hibernate Search Facet在多个字段上

如何通过对Infinispan或Hibernate Search的API调用为各个项目编制索引?

Hibernate Search:如何正确使用通配符?

如何使用Hibernate Lucene Search访问实体中外键的排序字段名称?

如何在Hibernate拦截器中获取Hibernate会话?

如何在hibernate中实现并发

如何在Hibernate中从XML生成主键?

如何在Hibernate中建立乘法关系?

如何在JPA中复制Hibernate的saveOrUpdate?

如何在Eclipse中安装Hibernate

如何在Kubuntu中完全禁用Hibernate?

如何在Hibernate中查询Embedded类?

如何在Hibernate 5中解决AbstractMethodError?

org.hibernate.HibernateException:在Hibernate Search中建立索引时出错(在事务完成之前)