【发布时间】:2022-01-31 18:55:50
【问题描述】:
我有一个实体ExerciseEntity,它包含一个对象列表identifiers
@ElementCollection
@IndexedEmbedded(targetElement = IdentifierEntity.class)
private Set<IdentifierEntity> identifiers;
列表示例:
"identifiers": [
{
"identifierType": "AM",
"identifierValue": "333333333"
},
{
"identifierType": "FINESS",
"identifierValue": "888888888"
}
]
identifierType 的属性是枚举类型,所以我实现了一个自定义桥接器,就像在这个 link 中一样。
@Enumerated
@Field(name = "identifierType", bridge = @FieldBridge(impl = EnumAsIntegerBridge.class))
private IdentifierTypeEnum identifierType;
我想通过identifierValue 搜索所有ExerciseEntity,其中identifierType 等于FINESS。
我尝试使用以下查询,但它无法正常工作,当我使用 identifierValue=333333333 进行测试时,我得到了一个结果,但我应该什么也得不到,因为它的类型是 AM 而不是 FINESS。
List<Query> listOfQuery = new ArrayList<>();
listOfQuery.add(getQueryBuilder().keyword().onField("identifiers.identifierType").matching(IdentifierTypeEnum.FINESS.ordinal()).createQuery());
listOfQuery.add(getQueryBuilder().keyword().onField("identifiers.identifierValue").matching(identifierValue).createQuery());
Builder finalLuceneQuery = new BooleanQuery.Builder();
listOfQuery.stream().forEach(query -> finalLuceneQuery.add(query, BooleanClause.Occur.MUST));
FullTextQuery fullTextQuery = getFullTextEntityManager().createFullTextQuery(finalLuceneQuery.build(), ExerciseEntity.class);
【问题讨论】:
标签: hibernate jpa lucene hibernate-search