关于删除级联休眠ManyToMany [英] On Delete Cascade Hibernate ManyToMany
问题描述
我希望UserAcounts能够有许多UserGroups,并且所有Groups都可以有许多Users.并且有一个联接表.我希望在删除useraccount时删除联接表中useraccount和usergroup之间的关系. /p>
实际上,我想使用在删除级联上".在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;
我研究了太多,但无法运行.
设置为DELETE的级联在删除用户时不会删除组和用户之间的关联.它将删除组本身.
要删除关联,您只需在删除用户之前从用户组集合中删除所有组:
user.getUserGroups().clear();
session.delete(user);
从用户中删除组就是从联接表中删除关联的原因.
I want UserAcounts to be able to have many UserGroups.And All Groups can have many Users.And there is a join table.I want the releation between useraccount and usergroup in join table to be deleted when a useraccount is deleted.
Actually i want to use "on delete cascade".In ManyToMany relation I coulndn't run it unfortunately.I've tried so much thing but no solution I've found.
Note:I just want Relation to be deleted with on delete cascade
is it possible is there a way to do that?
Here is my hibernate classes
@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;
I've researched too much but i couldn't run it.
A cascade set to DELETE wouldn't delete the association between a group and a user when you delete a user. It would delete the groups themselves.
To delete the association, you just have to remove all the groups from the collection of groups of the user before deleting the user:
user.getUserGroups().clear();
session.delete(user);
Removing the groups from the users is what will delete the associations from the join table.
这篇关于关于删除级联休眠ManyToMany的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!