[英]query results with hibernate-search with associated enumeration field
我正在嘗試使具有以下關聯的實體的文檔索引:
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。
您不需要實現特定的橋,實際上恰恰相反:橋已經存在,因此Hibernate Search希望您將枚舉值傳遞給查詢,而您傳遞的是String值。
嘗試將.matching("HARD_DEL")
替換為.matching(EDocState.HARD_DEL)
。
注意:我懷疑其余的堆棧跟蹤信息會告訴您有關類強制轉換異常的信息,該異常可能已經提示您。 為了您自己,您可能不應該這樣隱藏堆棧跟蹤,堆棧跟蹤可能包含有價值的信息。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.