我有一对多关系,即A和B. A可以指许多B实例。 B实例也可以独立管理。 这就是为什么,B类看起来像这样:
public class B {
@Id
private String id;
private String appId;
}
一个类将引用B实例列表。所以它看起来像这样:
public class A {
@Id
private String id;
private int age;
private List<B> bInstances;
}
当b实例填充B实例然后保存实例时,B实例的id字段将从JSON文档中删除,因为它是用@Id注释的。 当B嵌入到另一个类中时,我只需要将此字段添加到JSON。 当B实例独立保存时,@ Id字段可以用作常规键。 我怎么能这样做?
答案 0 :(得分:0)
我强烈建议您不直接将B的实例存储在A的文档中。如果B的实例在另一个上下文中被更改,则会导致数据不一致。如果B的实例存储在A类的多个文档中,则会不必要地复制数据。
将一个类的实例存储在另一个类中的所需方法是保存文档ID。所以你的A级应该是这样的:
public class A {
@Id
private String id;
private int age;
private List<String> bInstanceIds;
}
答案 1 :(得分:0)
要具体回答您的问题,是注释@Id
的字段不会写入序列化的json。这里你最好的选择是复制字段并在构造函数或setter中设置它的值,例如:
public class B {
@Id
private String metaId;
private String id;
private String appId;
public setMetaId(String metaId) {
this.metaId = metaId;
this.id = metaId;
}
}
如果您不希望序列化中出现重复,可以@JsonIgnore
其中一个。
注意:我完全同意Robin的回答,但是有些情况下您希望保存数据,并且您希望将来引用它...所以您不关心B实例是否已更改保存数据一周后。所以这取决于你的情况。