使用hibernate搜索版本v4.5.0,我想使用像
这样的东西@IndexedEmbedded(depth = 0, includePaths = {"id", "name"})
而不是
@IndexedEmbedded(depth = 1)
如果我不需要关联类的所有细节,只需要一个或两个字段。我遇到的问题是关系另一边的@ContainedIn现在似乎没有效果。我认为“includePaths”的目的是允许您将信息索引超出指定深度的范围。如果是这样,当关联实体发生变化时,如何保持主要实体索引同步?
更糟糕的是,我发现将seePaths设置为看似无关的条目也会破坏我的@containedIn逻辑。
e.g。 “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操作仅反映在卡索引本身上,但不反映在拥有该卡的Person索引中。但是,如果我从
更改看似无关的套装注释@IndexedEmbedded(depth = 0, includePaths = {"id"})
到
@IndexedEmbedded(depth = 1, includePaths = {"id"})
然后卡片和人物都会更新。
答案 0 :(得分:0)
“includePaths”不会将信息编入超出给定“深度”的索引,因此您需要至少使用“depth = 1”才能使“includePaths”正常工作。
由于您使用“includePaths”,因此只会将您指定的路径编入索引,我认为这就是您想要的。
this文件中的第66页(实物页面58)详细解释了这一点。