2013-11-02 43 views
0

我有映射@ManyToMany兩個實體類JPA多對多逆側不能執行合併操作後進行級聯

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); 
} 

它清除許多用戶使用標籤實體牛逼ü關係,我相信這工作,因爲標籤實體是由於側,但是當我有逆側執行此;

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

它不放在桌子上做任何事情,其實我是想代碼清除許多標籤與一個用戶U牛逼的關係,但我覺得,因爲這是一個逆面加入級聯= CascadeType.MERGE將使合併的操作,這em.merge(U);但它不 請幫助

回答

2

你也應該從Tag實體刪除User

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