我遇到了在Hibernate Search中索引boolean @field的问题,问题是当对象发生了变化时,其余的字段都被更改了,只有boolean字段保持了对象的旧状态。
@JsonIgnore
@Field(name = "isWarning", index = Index.YES)
@SortableField(forField = "isWarning")
private boolean isWarning() {
//some logic
}
解决这个问题的正确方法是什么?
答案 0 :(得分:0)
我认为这是"逻辑"你提到访问其他实体。您需要告诉Hibernate Search这些实体包含在具有isWarning
方法的实体中。
我们假设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
中的更改不会影响{{1}的结果,也会在每次SomeOtherEntity
更改时重新编制索引isWarning
}}。一个ticket has been filed to address this issue,但它还在等待。