1

在我删除与另一条记录相关的实体后,由于约束而出现以下错误:

语句 DELETE 与约束冲突... &c。

我使用以下代码管理此错误:

    Using transazione As ITransaction = sessione.BeginTransaction
        Try
            sessione.Delete(entity)
            transazione.Commit()
            Return True
        Catch ex As Exception
            transazione.Rollback()
            Return False
        End Try
    End Using

如果我尝试再次执行 UPDATE 语句,则会再次发生同样的错误,即使我不再执行 DELETE 语句。

有人可以帮助我了解我哪里出错了吗?

4

2 回答 2

2

请阅读NHibernate 参考中关于异常处理的章节,尤其是第二段:

如果 ISession 抛出异常,您应该立即回滚事务,调用 ISession.Close() 并丢弃 ISession 实例。ISession 的某些方法不会使会话保持一致状态。

当您调用 Delete() 时,您注册了要删除的对象。当异常发生时,并不意味着会话突然忘记了您删除对象的请求。此外,对 Rollback() 的调用主要向数据库发出 ROLLBACK 语句 - 它不会将加载的对象恢复到事务开始之前的状态。

通过在回滚事务后保留会话,您冒着在以后的事务中提交在第一个事务期间所做的一些更改的风险。

于 2013-07-14T11:49:55.617 回答
1

在引用的实体上,您是否设置了有关删除主要实体的级联规则?

通常,我使用 Hibernate for Spring Framework,但指导方针是相同的。

于 2013-07-13T12:18:54.903 回答