2010-07-21 51 views
5

我們有以下兩個實體與許多-to-many關聯:如何一次刪除Hibernate JoinTable中的所有關聯?

@Entity 
public class Role { 
    ... 
    @ManyToMany 
    @JoinTable(name = "user_has_role", joinColumns = { @JoinColumn(name = "role_fk") }, inverseJoinColumns = { @JoinColumn(name = "user_fk") }) 
    private Set<User>   userCollection; 
    ... 
} 

@Entity 
public class User { 
    ... 
    //bi-directional many-to-many association to Role 
    @ManyToMany(mappedBy = "userCollection") 
    private Set<Role>  roleCollection; 
    ... 
} 

如果我們想與

em.createQuery("DELETE Role").executeUpdate(); 

截斷所有數據,我們要清楚「user_has_role」JoinTable中的所有關聯如this answer所示:

for (...) 
{ 
    A a = aDao.getObject(aId); 
    B b = bDao.getObject(bId); 

    b.getAs().remove(a); 
    a.getBs().remove(b); 
    bDao.saveObject(b); 
} 

有沒有辦法一次性刪除JoinTable中的所有關聯而無需迭代所有數據? 也許有一個特殊的HQL命令像DELETE Role.user_has_role

回答

3

儘管JPA規範明確指出批量操作未級聯到相關實體(第4.10節「批量更新和刪除操作」),但我期望提供者至少處理連接表。不幸的是,Hibernate沒有,這是登錄在HHH-1917。解決方法:使用原生SQL。

相關問題