无法删除非hibernate映射中的外键约束

本文关键字:约束 映射 删除 hibernate | 更新日期: 2023-09-27 18:13:39

public class ReviewMap : ClassMapBase<Review>
    {
        public ReviewMap()
        {
            Table("Reviews");
            List(x => x.Objectives, m =>
            {
                m.Table("Objectives");
                m.Cascade(Cascade.All.Include(Cascade.DeleteOrphans));
                m.Key(k => k.Column("ReviewId"));
                m.Where("DeletionDate is null");
                m.OrderBy("OrderNo");
                m.Index(x => x.Column("OrderNo"));
                m.Inverse(true);
            }, m => m.OneToMany());
        }

public class ObjectiveMap : ClassMapBase<Objective>
    {
        public ObjectiveMap()
        {
            Table("Objectives");
            // Use "soft deletes" to allow us to capture results against deleted items
            Where("DeletionDate is null");
            SqlDelete("update Objectives set DeletionDate = getutcdate(), OrderNo = 1 where id=?");
            ManyToOne(x => x.Review, m =>
            {
                m.Column("ReviewId");
                m.NotNullable(true);
            });
            Property(x => x.Details, m =>
            {
                m.NotNullable(true);
                m.Length(1000);
                m.Column("Details");
            });
            Property("OrderNo", m =>
            {
                m.NotNullable(false);
            });
        }
    }

当我试图删除评论时,它给了我在Objective表中的外键约束的错误。因为reviewwid是目标表中的外键

你能告诉我是什么问题吗?

无法删除非hibernate映射中的外键约束

您可以使用自定义sql-delete来防止在目标表中删除,但是还要求所有的目标都有对Review行的引用。这应该如何工作呢?这也需要永远不删除评论。

这可以工作的一种方式是,如果你删除目标上的外键约束。ReviewId专栏,但我不建议这样做。由于删除的Review行的ID对历史记录没有帮助,因此更好的方法是创建目标。ReviewId列可为空,并在自定义sql-delete中为空。