代码之家  ›  专栏  ›  技术社区  ›  Gregor Sklorz

JPA:将子实体添加到父实体

  •  1
  • Gregor Sklorz  · 技术社区  · 7 年前

    我可能需要一些帮助,因为我对这些文件感到困惑:

    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能够建立这种关系。

    例如:

    Contact c = new Contact();
    c.provider = providerX;
    repo.save(c);
    

    • 触点插入DB(良好)

    我知道我可以将联系人设置为提供者的属性。 providerX.contacts.add(c); ... repo.save(providerX)

    格雷戈

    1 回复  |  直到 7 年前
        1
  •  3
  •   Amer Qarabsa    4 年前

    首先,您需要在非所有者实体中添加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 use getters and setters  
    repo.save(c);
    

     @ManyToOne(fetch = FetchType.LAZY,cascade=CascadeType.PERSIST)
    private Provider provider;