我可能需要一些帮助,因为我对文档感到困惑:
我有一个父JPA实体:
public class Provider implements Serializable {
...
@OneToMany(fetch = FetchType.LAZY)
private List<Contact> contacts;
孩子:
public class Contact implements Serializable {
...
@ManyToOne(fetch = FetchType.LAZY)
private Provider provider;
如果我只是添加联系人,我希望JPA创建关系。
e.g:
Contact c = new Contact();
c.provider = providerX;
repo.save(c);
现在发生的事情是:
我知道我可以将联系人设置为提供者的财产。 providerX.contacts.add(c); ... repo.save(providerX)
但这有点不方便,感觉不对。
如何在保存联系人时配置实体以创建此关系?
感谢您的帮助。 格里
答案 0 :(得分:2)
首先,您需要在非拥有实体中添加mappedBy以建立双向关系,并初始化列表,以便您只需在需要时添加
@OneToMany(fetch = FetchType.LAZY, mappedBy="provider")
private List<Contact> contacts = new ArrayList<>();//im supposing java 8
然后,由于你的关系是双向的,它的逻辑是将关系的每一边映射到另一边,因此你需要在另一边引用每一边
Contact c = new Contact();
c.setProvider(providerX);
providerX.getContacts().add(c);//please user getters and setters
repo.save(c);
并且最后您需要在提供商内部级联提供商,以便当您保留联系人时提供商会被保留
@ManyToOne(fetch = FetchType.LAZY,cascade=CascadeType.PERSIST)
private Provider provider;