你好
我有以下两个实体
@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仅生成外键约束,这将导致上述错误。有谁知道为什么休眠不生成“ ON DELETE CASCADE”语句?
希望有人可以帮助我
谢谢
最佳答案
@OnDelete
注释会影响Hibernate生成数据库架构的方式。如果您的架构不是由Hibernate生成的,或者在添加此注释后尚未更新,则它将无法正常工作。
如果要将手动创建的数据库架构与@OnDelete(action = OnDeleteAction.CASCADE)
一起使用,则应在架构中将外键约束手动定义为on delete cascade
。