我正在尝试为具有以下关联的实体建立文档索引:
DocVersion:
@Entity
@Indexed
public class DocVersion implements Serializable {
...
@ManyToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
@JoinColumn(name = "doc_uuid")
@IndexedEmbedded
private Document2 document2;
...
}
文档2:
@Entity
@Indexed
public class Document2 implements Serializable {
...
@Column(name = "entityState")
@Enumerated(EnumType.STRING)
@Field(bridge=@FieldBridge(impl=EnumBridge.class), index=Index.YES)
private EDocState eDocState;
...
}
这是我查询索引的方式(仅出于测试目的):
FullTextEntityManager fullTextEntityManager = Search.getFullTextEntityManager(entityManager);
try {
fullTextEntityManager.createIndexer().startAndWait();
} catch (InterruptedException e) {
e.printStackTrace();
}
QueryBuilder queryBuilder = fullTextEntityManager.getSearchFactory()
.buildQueryBuilder()
.forEntity(DocVersion.class)
.get();
org.apache.lucene.search.Query luceneQuery = queryBuilder.keyword()
.onField("document2.eDocState").matching("HARD_DEL")
.createQuery();
List results = fullTextEntityManager.createFullTextQuery(luceneQuery, DocVersion.class)
.getResultList();
但我没有得到结果:
WARNING: org.hibernate.search.bridge.BridgeException: Exception while calling bridge#objectToString
entity class: com.nws.vedica.model.entity.DocVersion
entity property path: document2.eDocState
field bridge: TwoWayString2FieldBridgeAdaptor [stringBridge=org.hibernate.search.bridge.builtin.EnumBridge@60942b8b]
那是什么意思?我是否需要为枚举实现一些特定的桥梁(看起来如何)? 这只是值枚举,所以我认为问题出在其他地方。
请协助我获得结果。
我正在使用的软件包: hibernate-search-orm:5.9.3。
答案 0 :(得分:0)
您不需要实现特定的桥,实际上恰恰相反:桥已经存在,因此Hibernate Search希望您将枚举值传递给查询,而您要传递字符串值。
尝试将.matching("HARD_DEL")
替换为.matching(EDocState.HARD_DEL)
。
注意:我怀疑其余的堆栈跟踪信息会告诉您有关类强制转换异常的信息,该异常可能使您失望。出于您自己的考虑,您可能不应该这样隐藏堆栈跟踪,堆栈跟踪可能包含有价值的信息。