簡體   English   中英

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

[英]How to index a inherited field in Hibernate-search?

我正在使用 java jpa Hibernate-search 應用程序,我知道 Hibernate-search 索引會自動在實體中的每個 @Id 注釋。 問題是我有一個“主域” class 包含@Id 注釋,然后我有另一個 class 繼承“主域”,然后似乎是 Hibernate 搜索字段無法識別。

這是我的主域 class。

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

我有一個繼承此 class 的 class“語言”:

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

    @Field
    private String name;
}

最后,我還有另一個 class 稱為“LanguageRelation”,它與語言 class 相關。 看起來像:

@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 class 位於我試圖執行 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)

然后重新索引您的數據,並再次運行您的查詢。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM