删除与其他记录相关的实体后,由于约束而出现以下错误:
语句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语句,也会再次发生同样的错误。
有人可以帮我理解我哪里出错吗?
答案 0 :(得分:2)
请阅读NHibernate reference's chapter on exception handling,特别是第二段:
如果ISession抛出异常,则应立即回滚事务,调用ISession.Close()并丢弃ISession实例。某些ISession方法不会使会话保持一致状态。
当您调用Delete()时,您将注册该对象以进行删除。发生异常时,并不意味着会话突然忘记了删除对象的请求。此外,对Rollback()的调用主要向数据库发出ROLLBACK语句 - 它不会将加载的对象恢复到事务开始之前的状态。
通过在回滚事务后保持会话,您可能会在以后的事务中承担在第一次事务中提交某些更改的风险。
答案 1 :(得分:1)
在引用的实体上是否有关于删除主实体的级联规则?
通常,我正在使用Hibernate for Spring Framework,但指导方针是相同的。