如何解决@IndexedEmbedded 字段的自动重新索引
据我了解
的文档的这一部分没有双向映射的@IndexedEmbedded 字段没有自动重新索引。我对么?如果是这样,我很想知道是什么导致了引入这个,因为在 Hibernate 搜索中,在更新 @IndexedEmbedded 字段中的字段时会自动重新索引。这是否意味着我现在负责更新索引?
以下是我的用例示例,它导致索引未更新:
@Indexed(index = "foo_index")
@Entity
public class Foo {
private Long id;
@IndexedEmbedded
@ManyToOne(fetch = LAZY)
private Bar bar;
}
@Entity
public class Bar {
private Long id;
@GenericField
private String barFieldOne;
@GenericField
private String barFieldTwo;
}
然后假设我从数据库中检索 Foo 并像这样更改栏字段:
Foo foo = repository.findById(1);
foo.getBar().setBarFieldOne("newValue");
repository.save(foo);
尽管我正在处理 @Indexed 对象(在我们的例子中是 Foo),但这不会触发 foo 索引的索引更新。我有很多单向关系,我不想让它们双向,因为我不需要它们,它们会导致性能问题。我知道如果我自己更新 bar 实体,它不会更新索引,但在这里我通过主 @Indexed 实体更新它,我希望索引会被更新。
这个用例在 hibernate search 5 中完美运行,老实说,这很重要。有没有办法让它在这里工作,因为这会让我的生活更轻松。
解决方法
您很清楚,当修改后的实体和索引实体之间只有单向关联时,Hibernate Search 无法触发重新索引。
有计划解决这个问题,也许有一天,但这仍然需要一些配置:https://hibernate.atlassian.net/browse/HSEARCH-1937
这个用例在 hibernate search 5 中完美运行,老实说这是一个重要的
为此我需要一个复制器。如果你设法让它发挥作用,我会非常非常惊讶。 如果有效,那可能只是其他原因的副作用:您禁用了脏检查,或者您的实体上有一个临时属性,导致它每次都被重新索引。
我们在搜索 6 中所做的只是确保在您尝试对单向关联使用 @IndexedEmbedded
时抛出错误,并强制您明确禁用该关联的自动重新索引。
它在 Hibernate Search 5 中也不起作用,但是 Hibernate Search 5 会默默地忽略这些问题,您最终会认为它起作用了,但它没有。
实际上,唯一的变化是您现在意识到了问题。它以前存在过。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。