我在 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] 删除。
我来说两句