我在Hibernate Search中为布尔值@field编制索引时遇到问题,问题是当对象已更改时,其余字段也会更改,也只有布尔值字段保持对象的旧状态。
@JsonIgnore
@Field(name = "isWarning", index = Index.YES)
@SortableField(forField = "isWarning")
private boolean isWarning() {
//some logic
}
解决这个问题的正确方法是什么?
最佳答案
我假设您提到的这个“逻辑”访问其他实体。您需要通过isWarning
方法告诉Hibernate Search这些实体包含在实体中。
假设isWarning
方法是在称为MainEntity
的实体中定义的,它从另一个称为SomeOtherEntity
的实体访问数据。
在SomeOtherEntity
中,将具有关联的反面:
public class SomeOtherEntity {
@ManyToOne // Or @OneToOne, or whatever
private MainEntity mainEntity;
}
只需添加@ContainedIn,您就可以做到:
public class SomeOtherEntity {
@ManyToOne // Or @OneToOne, or whatever
@ContainedIn
private MainEntity mainEntity;
}
请注意,不幸的是,如果频繁更新
SomeOtherEntity
,这可能会对性能产生重大影响:Hibernate Search不会确切知道SomeOtherEntity
中使用了MainEntity
的哪个部分,因此将重新索引MainEntity更改时,即使SomeOtherEntity
的更改不会影响SomeOtherEntity
的结果。 ticket has been filed to address this issue,但仍在等待中。