作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在 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/
我是一名优秀的程序员,十分优秀!