![](/img/trans.png)
[英]Hibernate-Search @IndexedEmbedded with HashMap, how to include keyset in index
[英]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.