微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

@IndexedEmbedded 字段的自动重新索引

如何解决@IndexedEmbedded 字段的自动重新索引

据我了解

的文档的这一部分

https://docs.jboss.org/hibernate/search/6.0/reference/en-US/html_single/#mapper-orm-reindexing-basics

没有双向映射的@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 举报,一经查实,本站将立刻删除。