1 回答

TA貢獻1829條經驗 獲得超4個贊
您嘗試執行的是關系查詢。Hibernate Search 不支持此類查詢??梢酝ㄟ^依賴 Lucene 中較低級別的 API 來實現它們,但老實說,我不建議這樣做,除非對 Lucene 專家來說:它不容易使用,應該仔細分析性能影響。
通常,您將如何解決此類問題是索引一個附加字段,例如“minimumStockDifference”,并檢查它是否大于零:
@Indexed
@Entity
public class Product {
private int minimumStock;
private int currentStock;
@Transient
@Field
public int getMinmumStockDifference() {
return currentStock - minimumStock;
}
}
然后你的查詢變成:
private BooleanJunction addInCriticalStock(QueryBuilder queryBuilder, BooleanJunction booleanJunction, boolean inCriticalStock) {
return booleanJunction
.must(queryBuilder
.range()
.onField("minimumStockDifference")
.above(0)
.createQuery()
);
}
請注意,如果您必須minimumStock從另一個實體獲取數據,請根據需要添加@ContainedIn注釋,以便您的Product實體在minimumStock更改時重新索引。
請注意,如果您不需要在同一查詢中進行全文搜索,您可以簡單地不使用 Hibernate Search 進行該查詢,而是通過HQL/JPQL或標準 API依賴 Hibernate ORM 查詢。
添加回答
舉報