gpt4 book ai didi

java - Hibernate:OnDelete 注释问题

转载 作者:行者123 更新时间:2023-12-02 00:42:10 29 4
gpt4 key购买 nike

你好我有以下两个实体

@Entity
public class DocumentCollection {
@Id
@GeneratedValue
private Long id;
@OneToMany(targetEntity=Document.class,mappedBy="documentCollection",cascade=javax.persistence.CascadeType.ALL)
@OnDelete(action = OnDeleteAction.CASCADE)
@Cascade(org.hibernate.annotations.CascadeType.DELETE_ORPHAN)
private Set<Document> documents;
...
}

并且:

@Entity
public class Document {
@Id
@GeneratedValue
private Long id;

@ManyToOne
private DocumentCollection documentCollection;
...
}

当 DocumentCollection 被删除时,所有引用的文档也应该被删除。但我收到此错误:

Cannot delete or update a parent row: a foreign key constraint fails (`tms_db`.`document`, CONSTRAINT `FK3737353BEB85533C` FOREIGN KEY (`documentCollection_id`) REFERENCES `documentcollection` (`id`))

我还尝试将 @OnDelete 注释放入文档类中,但没有成功。那么我错过了什么?供您引用,我使用的是 Hibernate 3.6.0.Final。

更新:我进行了 mysql 架构转储,并注意到文档表架构中没有 ON DELETE CASCADE 语句。 Hibernate 只生成外键约束,这会导致上述错误。有人知道为什么 hibernate 不生成“ON DELETE CASCADE”语句吗?

希望有人能帮助我谢谢

最佳答案

@OnDelete 注解影响 Hibernate 生成数据库模式的方式。如果您的架构不是由 Hibernate 生成的,或者添加此注释后尚未更新,则它将无法正常工作。

如果您想通过@OnDelete(action = OnDeleteAction.CASCADE)使用手动创建的数据库架构,您应该在架构中手动将外键约束定义为删除级联.

关于java - Hibernate:OnDelete 注释问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6045740/

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