JPA在网络应用程序中更新父级时不会删除子级

时间:2018-10-21 08:53:25

标签: java hibernate jpa

作者实体具有广告对象的集合(一对多双向关系)和电话的集合(一对多单向关系)。

作者

public class Author {

    @Id
    @GeneratedValue
    private int id;

    private String nameOfAuthor; 

    @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true)  
    @JoinTable(name = "author_phone",
            joinColumns = @JoinColumn(name = "author_fk_id"),
            inverseJoinColumns = @JoinColumn(name = "phone_fk_id"))
    @Fetch(FetchMode.SELECT)
    private List<Phone> phones = new LinkedList<>();

    @OneToMany(mappedBy = "author", cascade = CascadeType.ALL,
                orphanRemoval = true, fetch = FetchType.EAGER)
        private List<Advertisement> advertisements = new ArrayList<>();
    }

电话

public class Phone {

    @Id
    @GeneratedValue
    private int id;

    @Column(name = "phone_number")
    private String phoneNumber;
}

广告

public class Advertisement {

    @Id
    @GeneratedValue
    private int id;

    private String name;

    @ManyToOne
    @JoinColumn(name = "advert_author_id_fk")
    @Fetch(FetchMode.JOIN)
    private Author author;
}

保存作者的方法:

public void add(Author author) {             

        em.persist(author);
    }

更新作者的方法:

@PersistenceContext
private EntityManager em;
public void update(Author author) {
    Author merge = em.merge(author);
    em.persist(merge);    
}

当我发送数据库作者中存在的updatig的json时:

{
  "id": 2,
  "nameOfAuthor": "Segey",
  "advertisements": [],
    "phones":[]
}

Json用于保存作者:

{
  "nameOfAuthor": "Segey",

  "advertisements":[],
  "phones":[
    {
    "phoneNumber": "33333"
    }
    ]
}

我不知道为什么JPA删除所有phones,而不删除advertisements

0 个答案:

没有答案