繁体   English   中英

如何在Hibernate(JPA)中实现ON UPDATE CASCADE和ON DELETE CASCADE?

[英]How to realize ON UPDATE CASCADE and ON DELETE CASCADE in Hibernate(JPA)?

我有两个表: AccountsMails

帐户中的1个用户可以收到一些邮件( 1:配对 )。

  • 当用户从Accounts删除其个人资料时,hibernate应该删除该用户的所有邮件( Mails )。 Accounts具有ID(PK)和其他列。 Mails具有id(PK),user_id(FK:user_id-> Accounts.id)和其他列。

如何在Hibernate(或JPA)上实现上述实现?

我的实体类如下:

//Accounts class
@OneToMany(mappedBy = "accounts", cascade = CascadeType.ALL, orphanRemoval = true)
private Set<Mails> mails;

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

但是,当我编辑或删除某些父行时,hibernate说:无法删除或更新父行:外键约束失败。 那么我到底在哪里犯错?


UPDATE

当我们执行SQL或HQL查询时会发生此错误,但并非如此。 我们应该使用entitymanager.remove或entitymanager.merge方法。 我的实体类别有效。

看来您在帐户和邮件之间存在双向关系。 在帐户类中,您必须使用类似以下的方式:

@OneToMany(cascade = CascadeType.ALL, orphanRemoval = true, mappedBy = "accounts")  
private Set<Mails> mails;

双向需要属性mappedby。 提示:我认为,仅在确实需要时才应使用双向关系。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM