如果字段不在db表中,如何在Hibernate Search中索引一个布尔@Field

时间:2017-10-17 12:11:44

标签: java hibernate-search

我遇到了在Hibernate Search中索引boolean @field的问题,问题是当对象发生了变化时,其余的字段都被更改了,只有boolean字段保持了对象的旧状态。

@JsonIgnore
@Field(name = "isWarning", index = Index.YES)
@SortableField(forField = "isWarning")
private boolean isWarning() {
   //some logic
}

解决这个问题的正确方法是什么?

1 个答案:

答案 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,但它还在等待。