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 查询。
添加回答
举报