关于删除级联休眠ManyToMany [英] On Delete Cascade Hibernate ManyToMany

查看:92
本文介绍了关于删除级联休眠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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆