Hibernate Search 6 修改EntityB后Elasticsearch索引未更新问题咨询
问题修复方案
1. 修正@AssociationInverseSide的属性名拼写错误
你当前配置中@PropertyValue(propertyName = "entitya")的属性名是小写a,但是EntityB类中对应的关联字段名为驼峰格式的entityA,拼写不匹配会导致Hibernate Search无法识别反向关联,自然无法触发EntityA的重索引。修正后的配置如下:
@OneToOne @JoinColumn(unique = true) @Cascade(value = {CascadeType.MERGE, CascadeType.PERSIST, CascadeType.SAVE_UPDATE}) @IndexedEmbedded @AssociationInverseSide(inversePath = @ObjectPath( @PropertyValue(propertyName = "entityA") )) private EntityB entityB;
2. 删除EntityA.entityB字段上的ReindexOnUpdate.SHALLOW配置
@IndexingDependency(reindexOnUpdate = ReindexOnUpdate.SHALLOW)的作用是仅当关联关系本身变更(比如EntityA关联的EntityB实例被替换)时才触发重索引,忽略关联对象本身的属性变更,这和你要实现的EntityB属性变更同步更新EntityA索引的需求完全冲突,直接删除该注解即可,默认配置会自动监听关联对象的属性变更。
3. 确认EntityB的关联映射正确性
你当前EntityB中entityA字段的@JoinColumn(name = "id")配置表示用EntityB的主键作为外键关联EntityA,属于主键关联的双向一对一映射,需要确保JPA层面该双向关联本身能正常工作:比如你查询EntityB的时候能正确拿到关联的EntityA实例,不存在映射异常。如果你的业务不是主键关联,那这个@JoinColumn配置本身就有问题,需要先修正JPA映射,Hibernate Search依赖JPA的关联映射关系来识别反向关联。
验证步骤
修改完成后重启服务,再执行你提到的EntityB属性更新操作,EntityA对应的Elasticsearch索引就会自动同步EntityB的变更了。
内容的提问来源于stack exchange,提问作者user978123
相关产品推荐
相关产品推荐

