Hibernate 关于删除级联休眠多个

Hibernate 关于删除级联休眠多个,hibernate,hibernate-annotations,Hibernate,Hibernate Annotations,我希望UserAcounts能够有许多用户组。所有组都可以有许多用户。并且有一个联接表。我希望在删除useraccount时,联接表中useraccount和usergroup之间的关系被删除 实际上,我想使用“on delete cascade”。在许多关系中,不幸的是我无法运行它。我尝试了很多东西,但没有找到解决方案 注意:我只想删除与on delete cascade的关系 有没有可能有办法做到这一点 这是我的hibernate课程 @SuppressWarnings("serial")

我希望UserAcounts能够有许多用户组。所有组都可以有许多用户。并且有一个联接表。我希望在删除useraccount时,联接表中useraccount和usergroup之间的关系被删除

实际上,我想使用“on delete cascade”。在许多关系中,不幸的是我无法运行它。我尝试了很多东西,但没有找到解决方案

注意:我只想删除与on delete cascade的关系

有没有可能有办法做到这一点

这是我的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;
@SuppressWarnings(“串行”)
@实体
@表(name=“用户账户”)
公共类UserAccount实现可序列化{
@身份证
@列(name=“ID”)
@生成值
私人长id;
@列(name=“name”)
私有字符串名称;
@列(name=“姓氏”)
私家姓;
@列(name=“EMAIL”)
私人字符串电子邮件;
@列(name=“USER\u name”)
私有字符串用户名;
@列(name=“PASSWORD”)
私有字符串密码;
@列(name=“ENABLED”)
@类型(Type=“是\否”)
启用私有布尔值;
@列(name=“账户未到期”)
@类型(Type=“是\否”)
私有布尔帐户非Expired;
@列(name=“凭证未过期”)
@类型(Type=“是\否”)
私有布尔凭证非Expired;
@列(name=“帐户未锁定”)
@类型(Type=“是\否”)
私有布尔帐户未锁定;
@列(name=“条目\日期”)
私人日期入口日期;
@列(name=“更新日期”)
私人日期更新日期;
@列(name=“上次登录日期”)
私人日期lastLoginDate;
@列(name=“LOCAL”)
私有字符串本地;
@ManyToMany(cascade=CascadeType.ALL,fetch=FetchType.EAGER)
@JoinTable(name=“ACCOUNT\u GROUP”,joinColumns={@JoinColumn(name=“ID”)},inverseJoinColumns={@JoinColumn(name=“GROUP\u ID”)})
私有列表用户组;
@抑制警告(“串行”)
@实体
@表(name=“USER\u GROUP”)
公共类UserGroup实现了可序列化{
@身份证
@列(name=“GROUP\u ID”)
@生成值
私人长id;
@列(name=“GROUP\u name”)
私有字符串名称;
@列(名称=“组描述”)
私有字符串描述;

我研究的太多了,但无法运行它。

要删除的级联集不会在删除用户时删除组和用户之间的关联。它会删除组本身

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

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

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

JB Nizet中的示例非常适合删除多个实体的关联。我必须删除300000个关联。在这种情况下,最好使用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();