gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 07:34:20 29 4
gpt4 key购买 nike

我有两个表:AccountsMails

帐户中的 1 个用户可以拥有一些邮件(1 : M 分配)。

  • 当用户删除他的个人资料(从帐户)时,hibernate应该删除该用户的所有邮件(从邮件)。 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 显示:无法删除或更新父行:外键约束失败。那么我究竟在哪里犯了错误?

<小时/>

更新

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

最佳答案

您的帐户和邮件之间似乎存在双向关系。在帐户类中,您必须使用类似以下内容的内容:

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

双向需要映射的属性。提示:在我看来,只有在确实有必要的情况下才应该使用双向关系。

关于java - 如何在Hibernate(JPA)中实现ON UPDATE CASCADE和ON DELETE CASCADE?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17177155/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com