使用@IndexingDependency的derivedFrom与PropertyBridge触发HSEARCH700020错误如何解决
解决方案
报错原因
你当前的配置里,currentStatus是@Transient修饰的 transient 属性,没有标注JPA实体关联注解,Hibernate Search无法自动识别这个属性关联到Status实体的反向映射关系,因此不知道当Status实体修改时是否需要触发Person的索引更新,所以抛出HSEARCH700020错误。
两种修复方案
方案1:不需要Status修改时自动重索引Person
如果你的业务场景允许Status实体内部字段(比如日期、状态内容)修改后不实时更新Person的索引,仅当Person的status集合元素增减时才触发重索引,直接给@IndexingDependency添加reindexOnUpdate配置即可:
@Transient @StatusBinding(fieldName = "currentStatus") @IndexingDependency( derivedFrom = @ObjectPath(@PropertyValue(propertyName = "status")), reindexOnUpdate = ReindexOnUpdate.SHALLOW ) public Status getCurrentStatus() { // 原有逻辑不变 }
注意:该配置下,如果
Status实体的date、note等字段修改,对应关联的Person不会自动重索引,需要你手动触发或者定期全量重索引来保证数据一致性。
方案2:需要Status修改时自动重索引Person
如果需要Status实体修改后实时更新对应Person的索引,你需要额外添加@AssociationInverseSide注解,显式告知Hibernate Search该关联的反向映射路径:
@Transient @StatusBinding(fieldName = "currentStatus") @IndexingDependency(derivedFrom = @ObjectPath(@PropertyValue(propertyName = "status"))) @AssociationInverseSide(inversePath = @ObjectPath(@PropertyValue(propertyName = "patient"))) public Status getCurrentStatus() { // 原有逻辑不变 }
这个注解会告诉Hibernate Search,currentStatus对应的Status实体通过patient属性反向关联到Person,当Status修改时,需要更新其patient属性对应的Person的索引。
额外代码问题修正
你贴出的代码里存在两处笔误,会导致编译失败:
StatusBinder内部类名写错:StatusBrige应该改为StatusBridgeStatusBridge的write方法里,mainStatus.getStatus缺少方法调用括号,应该改为mainStatus.getStatus()
内容的提问来源于stack exchange,提问作者Pilpin
相关产品推荐
相关产品推荐

