2010-07-21 17 views
5

Biz birlikte aşağıdaki iki varlıklara sahip pek-çok dernek:Hazırda bekleyen tüm katılımcılar bir kerede bir JoinTable nasıl silinir?

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

ve

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

biz temizlemek zorunda

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

ile tüm verileri kesmek istiyorsanız

this answer:

'te gösterildiği gibi "user_has_role" JoinTable'daki tüm ilişkilendirmeler
for (...) 
{ 
    A a = aDao.getObject(aId); 
    B b = bDao.getObject(bId); 

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

Tüm verileri yinelemeden JoinTable öğesindeki tüm ilişkilendirmeleri bir kerede silmek için bir yol var mı? Belki bir HQL-Command gibi DELETE Role.user_has_role var?

cevap

3

JPA spesifikasyonunda toplu işlemlerin ilgili varlıklara (bölüm 4.10 Toplu Güncelleme ve Sil İşlemleri) olarak ayarlanmadığını açıkça belirtirken, sağlayıcıların en azından birleştirme tablolarıyla ilgilenmesini beklerim. Ne yazık ki, Hazırda Bekleme yok ve bu HHH-1917 oturum açmış. Geçici çözüm: yerel SQL kullanın.

İlgili konular