我在使用带有休眠搜索 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 的子级持久化在弹性搜索索引中。还行吧。当我直接编辑 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);
问候。