gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 09:23:42 25 4
gpt4 key购买 nike

我正在 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;
}

我有一个类“Language”,它继承了这个类:

@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)

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

关于java - 如何在 Hibernate-search 中索引继承字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58489569/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com