【发布时间】:2021-11-12 06:59:11
【问题描述】:
我在使用带有休眠搜索 6 的弹性搜索时遇到问题。假设我们有这个设置:
@Entity
@Table(name = "entityA")
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
@Indexed(index = "entityA")
public class EntityA {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "sequenceGenerator")
@SequenceGenerator(name = "sequenceGenerator")
@GenericField
private Long id;
@Column(name = "name")
@KeywordField
private String name;
@OneToOne
@JoinColumn(unique = true)
@Cascade(value = {CascadeType.MERGE, CascadeType.PERSIST, CascadeType.SAVE_UPDATE})
@IndexedEmbedded
@IndexingDependency(reindexOnUpdate = ReindexOnUpdate.SHALLOW)
private EntityB entityB;
}
@Entity
@Table(name = "entityB")
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
public class EntityB {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "sequenceGenerator")
@SequenceGenerator(name = "sequenceGenerator")
@GenericField
private Long id;
@Column(name = "name")
@KeywordField
private String name;
@OneToOne(cascade = {}, fetch = FetchType.EAGER, targetEntity = EntityA.class)
@JoinColumn(name = "id", nullable = false)
@IndexingDependency(reindexOnUpdate = ReindexOnUpdate.DEFAULT)
private EntityA entityA
}
当我第一次持久化 EntityA(即被索引的实体)时,EntityB 作为 EntityA 的子级持久化在 elasticsearch 索引中。还行吧。当我直接编辑 EntityB 并对其进行更改时会出现问题,此更改不会传播到 elasticsearch 索引。我错过了什么吗?
更新 1
@yrodiere 回答后,我做了以下更改:
@OneToOne
@JoinColumn(unique = true)
@Cascade(value = {CascadeType.MERGE, CascadeType.PERSIST,
CascadeType.SAVE_UPDATE})
@IndexedEmbedded
@AssociationInverseSide(inversePath = @ObjectPath(
@PropertyValue(
propertyName = "entitya" ) ))
private EntityB entityB;
问题仍然存在。如果我这样做:
EntityB b = entityBRepository.findById(5051L).get();
b.setProperty("3333");
entityBRepository.save(b);
问候。
【问题讨论】:
标签: java spring-boot elasticsearch hibernate-search hibernate-search-6