你好
我有以下两个实体

@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

09-28 10:30