2012-01-02 6 views
2

UserAcountsには多くのUserGroups.Andを持たせたいと思っています。そして、すべてのグループには多くのUsersがあります。そして、joinテーブルがあります。私はjoinテーブルのuseraccountとusergroupの間の関連性を削除したいuseraccountが削除されます。削除カスケードハイバーネーションManyToMany

実際に私は "削除カスケード"を使用したいと思います。ManyToMany関係では、私は残念なことにそれを実行できません。私はそれほど多くのことを試みましたが、解決策は見つかりませんでした。

注:私はちょうど

ことが可能であることを行う方法がある関係は、削除カスケードにして削除することがしたいですか?ここで

私の休止状態のクラスは、私はあまりにも多くを調査してきましたが、私はそれを実行することができませんでした

@SuppressWarnings("serial") 
@Entity 
@Table(name = "USER_ACCOUNT") 
public class UserAccount implements Serializable { 

@Id 
@Column(name = "ID") 
@GeneratedValue 
private Long id; 

@Column(name = "NAME") 
private String name; 

@Column(name = "SURNAME") 
private String surname; 

@Column(name = "EMAIL") 
private String email; 

@Column(name = "USER_NAME") 
private String username; 

@Column(name = "PASSWORD") 
private String password; 

@Column(name = "ENABLED") 
@Type(type = "yes_no") 
private boolean enabled; 

@Column(name = "ACCOUNT_NON_EXPIRED") 
@Type(type = "yes_no") 
private boolean accountNonExpired; 

@Column(name = "CREDENTIALS_NON_EXPIRED") 
@Type(type = "yes_no") 
private boolean credentialsNonExpired; 

@Column(name = "ACCOUNT_NON_LOCKED") 
@Type(type = "yes_no") 
private boolean accountNonLocked; 

@Column(name = "ENTRY_DATE") 
private Date entryDate; 

@Column(name = "UPDATE_DATE") 
private Date updateDate; 

@Column(name = "LAST_LOGIN_DATE") 
private Date lastLoginDate; 

@Column(name = "LOCAL") 
private String local; 

@ManyToMany(cascade = CascadeType.ALL,fetch=FetchType.EAGER) 
@JoinTable(name = "ACCOUNT_GROUP", joinColumns = { @JoinColumn(name = "ID") }, inverseJoinColumns = { @JoinColumn(name = "GROUP_ID") }) 
private List<UserGroup> userGroups; 








@SuppressWarnings("serial") 
@Entity 
@Table(name = "USER_GROUP") 
public class UserGroup implements Serializable { 

@Id 
@Column(name = "GROUP_ID") 
@GeneratedValue 
private Long id; 

@Column(name = "GROUP_NAME") 
private String name; 

@Column(name = "GROUP_DESCRIPTION") 
private String description; 

です。

答えて

5

カスケードをDELETEに設定しても、ユーザーを削除するときにグループとユーザーの関連付けは削除されません。グループ自体が削除されます。関連付けを削除するには

、あなただけのユーザーを削除する前に、ユーザーのグループのコレクションからすべてのグループを削除する必要があります。ユーザーからグループを削除

user.getUserGroups().clear(); 
session.delete(user); 

から関連付けを削除しますものですジョインテーブル

+0

ありがとうございました。 –

0

JB Nizetの例は、複数のエンティティの関連付けを削除するのに最適です。私は30万の関連を削除しなければならなかった。その場合、Hibernateに優しい(そして、ネイティブのSQL言語を使用するというのはきれいではない)にもかかわらず、SQLQueryを使用する方が望ましいかもしれません。パフォーマンス上の問題のため、必要な場合があります。

SQLQuery queryDeleteDisabled = getSession().createSQLQuery("delete from ACCOUNT_GROUP where ID in (select ID from USER_ACCOUNT where ENABLED=?)"); 
    queryDeleteDisabled.setParameter(0, false); 
    int nbDelete = queryDeleteDisabled.executeUpdate(); 
関連する問題