我在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,但仍在等待中。

09-28 09:27