关于删除级联休眠许多许多



我希望useraccounts能够有许多UserGroups。所有组可以有许多用户。这里有一个连接表。我希望在删除useraccount时删除连接表中useraccount和usergroup之间的关系。

实际上我想使用"on delete cascade"。不幸的是,在许多许多关系中,我不能运行它。我试了这么多方法,但都没有找到解决办法。

注意:我只是想删除关系与delete级联

有可能吗有办法做到吗?

这是我的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);

从用户中删除组将从连接表中删除关联。

JB Nizet的例子非常适合删除多个实体的关联。我不得不删除30万个关联。在这种情况下,最好使用SQLQuery,即使它不是Hibernate友好的(而且使用本地SQL语言的事实并不漂亮)。由于性能问题,这可能是必要的。

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

相关内容

  • 没有找到相关文章

最新更新