使用Hibernate搜索版本V4.5.0,我特林使用类似使用@containedIn和的includepaths
@IndexedEmbedded(depth = 0, includePaths = {"id", "name"})
,而不是
@IndexedEmbedded(depth = 1)
在我不需要的所有细节的情况下关联的类,但只有一个或两个字段。我遇到的问题是,关系另一方的@ContainedIn现在似乎没有效果。我认为“includePaths”的意思是让你可以索引超出指定深度范围的信息。如果是这样,当关联实体更改时如何保持主实体索引同步?
更糟糕的是我发现设置includePaths看似无关的条目也打破了我的@containedIn逻辑。
例如“Person”对象包含一组“Card”对象。
public class Person {
...
@IndexedEmbedded(depth = 1)
private Set<Card> cards = new HashSet<Card>(0);
...
}
“卡”对象的类型为“西装”。
public class Card {
...
private Person person;
@Field
private String cardName;//e.g. jack, queen, king
@IndexedEmbedded(depth = 0, includePaths = {"id"})//????????????
private Suit suit;//e.g. hearts, diamonds
...
@ContainedIn
public Person getPerson() {
return this.person;
}
}
与上面的代码,一个CRUD操作卡仅反映上证指数本身,而不是体现在谁拥有该卡的人物索引。不过,如果我对西服改变看似不相关的注释从
@IndexedEmbedded(depth = 0, includePaths = {"id"})
到
@IndexedEmbedded(depth = 1, includePaths = {"id"})
然后,两个卡和个人的entites被更新。
对不起,回复迟了,我失去了这个线程跟踪。据我可以看到从文档你可以看到: - 1.深度= 0是有效的*“当使用includePaths,并保持深度未定义,行为等同于设置depth = 0:只有包含的路径索引” * 2.它的索引超出指定的深度。如例4:10所示,*“parents.parents.parents.name”*的索引超出了深度。 我真正的问题是关系的另一方@containedIn不更新它指向的东西的索引。 – user2046211