加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 如何在使用Hibernate删除父项时删除所有子行?

发布时间:2020-12-15 04:11:06 所属栏目:Java 来源:网络整理
导读:我有2张桌子. // Accounts@OneToMany(mappedBy="accounts",cascade=CascadeType.ALL)@Cascade(org.hibernate.annotations.CascadeType.ALL)private SetMails mails;// Mails@ManyToOne(cascade=CascadeType.ALL)@JoinColumn(name="user_id",referencedColumn
我有2张桌子.

// Accounts
@OneToMany(mappedBy="accounts",cascade=CascadeType.ALL)
@Cascade(org.hibernate.annotations.CascadeType.ALL)
private Set<Mails> mails;

// Mails
@ManyToOne(cascade=CascadeType.ALL)
@JoinColumn(name="user_id",referencedColumnName="id",insertable=false,updatable=false)
private Accounts accounts;

如何在删除父行时组织删除所有子行?我曾尝试为Accounts表设置CascadeType.DELETE_ORPHAN,但是如果存在子行,我就无法删除父行.

解决方法

问题可能是关系定义在错误的方向.假设您有一个与邮件表具有一对多关系的帐户表,如果您将帐户关系定义为引用邮件,则最终无法从帐户中删除记录,直到它具有关联的邮件行为止.正确的方法是在邮件到参考帐户上创建外键.

使用ON DELETE CASCADE,您告诉MySQL它应删除一行(其表具有外键),如果其父(由键引用)被删除.定义允许此操作,因为在这种情况下,已删除的记录具有对它的引用.相反,如果记录具有指向其中的其他记录的引用,则不允许删除.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读