关于删除级联休眠ManyToMany

问题描述:

我希望UserAcounts能够拥有很多UserGroups.And所有组都可以有很多用户。并且有一个连接表。我希望当连接表中的useraccount和usergroup之间的关系被删除时useraccount被删除。关于删除级联休眠ManyToMany

其实我想用“关于删除级联”。在ManyToMany关系我coulndn't不幸运行它。我已经尝试了很多东西,但没有找到解决方案。

注:我只是想就与删除级联删除

是有可能是有办法做到这一点?

这里是我的Hibernate类

@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; 

我已经研究了太多,但我不能运行它。

级联设置为DELETE不会在删除用户时删除组和用户之间的关联。它会自己删除组。

要删除的关联,你只需要删除用户组的集合中的所有组删除用户之前:

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

从用户删除组是什么将删除协会连接表。

+0

谢谢你对我有用。 – 2012-01-02 10:56:56

来自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();