0

据我阅读这部分文档可以理解

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 并更改一个 bar 字段,如下所示:

Foo foo = repository.findById(1);
foo.getBar().setBarFieldOne("newValue");
repository.save(foo);

尽管我正在处理 @Indexed 对象(在我们的例子中为 Foo ),但这不会触发 foo 索引的索引更新。我有很多单向关系,我不想让它们双向,因为我不需要它们,它们会导致性能问题。我知道,如果我自己更新 bar 实体,它不会更新索引,但在这里我通过主 @Indexed 实体更新它,我希望索引会更新。

这个用例在 hibernate search 5 中完美运行,老实说,这很重要。有没有办法让它在这里工作,因为这会让我的生活更轻松。

4

1 回答 1

0

您很好理解,当修改的实体和索引实体之间只有单向关联时,Hibernate Search 无法触发重新索引。

有计划解决这个问题,也许有一天,但这仍然需要一些配置:https ://hibernate.atlassian.net/browse/HSEARCH-1937

这个用例在 hibernate search 5 中完美运行,老实说,这是一个重要的

我将需要一个复制器。如果你能成功,我会非常非常惊讶。如果它起作用了,它可能只是其他东西的副作用:你禁用了脏检查,或者你的实体上有一个临时属性,导致它每次都被重新索引。

@IndexedEmbedded我们在搜索 6 中所做的只是确保在您尝试在单向关联上使用时抛出错误,并强制您明确禁用该关联的自动重新索引。

它在 Hibernate Search 5 中也不起作用,但是 Hibernate Search 5 会默默地忽略这些问题,您最终会认为它有效,但事实并非如此。

所以真的,唯一的变化是你现在意识到了这个问题。它以前存在过。

于 2021-03-05T11:59:50.230 回答