2016-07-20 34 views
0

我有两个模型类。一个是Company.java,另一个是HumanResource.java。使用Morphia在MongoDB中映射POJO和使用引用

Company.java

@Entity("companies") 
public class Company { 
@Id 
private ObjectId id = new ObjectId(); 
private String companyName; 
private String emailAddress; 
private String pictureUrl; 
@Reference 
private List<HumanResource> humanResources; 
... 

HumanResource.java

@Entity("humanresources") 
public class HumanResource { 
@Id 
private ObjectId id = new ObjectId(); 
private String firstName; 
private String lastName; 
private String emailAddress; 
@Reference 
private Company company; 
... 

我想实现的是当我保存企业的数据存储的列表,文件应自动插入人力资源的相关名单。

另外,我在每一个模型类中声明

@Id 
private ObjectId id = new ObjectId(); 

。这是一种好方法还是应该改变它?

+0

但是,如何在创建公司时填充HumanResource的公司,反之亦然?另请发布您的收藏架构 – Newton

+0

公司集合填入HumanResources列表的参考。但是,HumanResources集合未在db中填充。 – fivetech

回答

1

Morphia将不会在这些引用上调用save()。您必须在要保留的实例上调用save()。你可以传入一个实例列表,所以你不需要循环,但是每个实例都需要显式传入。

+0

我明白了。它的作品谢谢你。我有另一个问题。我宣布私人ObjectId id = new ObjectId();在每个模型类中。这是一种好方法还是应该改变它? – fivetech

+0

Morphia /驱动程序会为您填充ID字段,只要它是ObjectId即可。但是手动创建ID没有任何坏处。这在大多数情况下是不必要的。 – evanchooly

+0

当我保存一个没有任何引用的对象时,它就会填充。但是,在这个示例中,当我没有手动创建时,@id字段不能为空,并且抛出映射异常 – fivetech