jpa多对多的反面不能在级联后执行合并操作

时间:2013-11-02 07:59:58

标签: jpa merge many-to-many

我有两个实体类,映射@ManytoMany

Inverse Side
public class Users implements Serializable {
@ManyToMany(mappedBy = "usersList",cascade=CascadeType.MERGE)
private List<Tags> tagsList = new ArrayList();

Owning Side
public class Tags implements Serializable {
 @JoinTable(name = "USERS_TAG_XREF", joinColumns = {
    @JoinColumn(name = "TAG_ID", referencedColumnName = "TAG_ID")}, inverseJoinColumns  = {
    @JoinColumn(name = "USER_ID", referencedColumnName = "USER_ID")})
  @ManyToMany
  private List<Users> usersList = new ArrayList();

现在当我在这样的拥有方面进行操作时;

 for(Tags t : tList){
 Users u = em.find(Users.class, id);  
 t.getUsersList().clear();
 em.merge(t);
 }

它清除了许多用户U与Tag实体t的关系,我认为这是有效的,因为Tag实体是欠边,但当我用反面执行时;

 Users u = em.find(Users.class,id);
 u.getTagList().clear();
 em.merge(u);

它在表上没有做任何事情,我实际上希望代码清除许多与一个用户u的关系,但我觉得因为这是一个反面,通过添加cascade = CascadeType.MERGE将允许合并操作,因为这em.merge(U);但它没有 请帮忙

1 个答案:

答案 0 :(得分:2)

您还应该从User实体

中删除Tag
Users u = em.find(Users.class,id);
{
    for (Tag t : u.getTagList())
    {
       t.hetUserList().remove(u);
    }
    u.getTagList().clear();
    em.merge(u);
}