问题
当
Status
实体被修改,Hibernate搜索不知道如何检索相应的
Person
有那个
地位
作为它的
currentStatus
.
解决方案
假设
当前状态
总是包含在
status
,之后呢
Status.patient
是地球的反面
Person.status
关联,您只需添加以下内容:
@Transient
@StatusBinding(fieldName = "currentStatus")
@IndexingDependency(derivedFrom = @ObjectPath(@PropertyValue(propertyName = "status")))
// ADD THIS ANNOTATION
@AssociationInverseSide(
inversePath = @ObjectPath(@PropertyValue(propertyName = "patient"))
)
public Status getCurrentStatus() {
// ...
}
为什么?
我会尽力解释的,但有点复杂,请耐心听我说。
派生属性和关联的反面是相关概念:它们的共同目的是允许Hibernate搜索执行自动重新索引。
然而,它们仍然是独立的概念,Hibernate搜索无法从中推断出其中一个。
具有
@IndexingDependency(derivedFrom)
,您定义的是
当前状态
取决于:
@IndexingDependency(derivedFrom = @ObjectPath(@PropertyValue(propertyName = "status")))
public Status getCurrentStatus() {
这告诉Hibernate Search
当前状态
无论何时
地位
财产变动。有了这些信息,Hibernate Search就可以在您调用
person.getStatus().remove(...)
或
person.getStatus().add(...)
(例如)你的
人
实体需要重新编制索引,因为
当前状态
被编入索引,它可能会改变。
在定制活页夹中,您还可以
defining dependencies
:
context.dependencies()
.use("status")
.use("date")
.use("note");
这告诉Hibernate Search
地位
,
date
和
note
a的性质
地位
实体变化
人
有那个
地位
作为它的
当前状态
需要重新编制索引。
然而Hibernate搜索不知道如何检索拥有该功能的人
地位
作为它的
当前状态
.
它可能知道如何取回所有拥有它的人
地位
在他们的
地位
布景,但那是另一回事,不是吗?Hibernate Search不知道这一点
当前状态
实际上是
地位
所有物据它所知,
getCurrentStatus()
很可能是这样的:
status.iterator().next().getParentStatus()
.那么当前状态将不包括在
Person#status
,目前尚不清楚
myStatus.getPatient()
可以退回一个
人
谁的
当前状态
是
myStatus
.
所以你需要明确地告诉Hibernate Search:“从给定的
Status myStatus
,如果检索
迈斯塔特斯。getPatient()
,你得到
人
谁的
当前状态
财产可以追溯到
迈斯塔特斯
“.这就是
@AssociationInverseSide
是给你的。