NHibernate Oracle - 事务提交问题

Posted

技术标签:

【中文标题】NHibernate Oracle - 事务提交问题【英文标题】:NHibernate Oracle - Transaction Commit Issue 【发布时间】:2009-09-10 04:32:45 【问题描述】:

0 票否决

嗨,

我在提交事务时运行相同的问题,但它失败了。我已经用 AnsiString 更改了我的所有映射字符串。但我仍然遇到错误。

选择工作正常,即使删除也工作正常。

如果我的事务只包含一个插入语句或更新语句,那么它也可以正常工作。

但是当有多个查询(插入/更新)时,在提交时它会给我错误“完整性约束:找不到父键”

你能帮帮我吗?

马赫什....

【问题讨论】:

你是如何映射实体的?是否存在 HasMany 关系或其他关联? 【参考方案1】:

此错误是完整性约束错误。这意味着在您的交易结束时,一个孩子在父子关系中没有父母。由于您在提交时收到此错误,这意味着 FOREIGN KEY 被声明为 DEFERRABLE(最初是延迟的)并且仅在提交时检查完整性。

您的逻辑有问题,也许您可​​以发布一个简单的示例(CREATE TABLE parent... CREATE TABLE child... UPDATE/INSERT),我们可以进一步帮助您。

【讨论】:

【参考方案2】:

NHibernate 插入新创建的employee_type 之前插入(或更新)您的员工。该错误意味着您的员工在数据库中缺少其employee_type。

2 个选择:

    在创建employee_type 之后和创建(或更新)您的员工之前执行ISession.Flush。 将外键更改为可延迟的。

【讨论】:

【参考方案3】:

我得到了解决方案....

由于 NHibernate 行为,我正在发生这种情况......

我已经明确地为自动增量创建了序列和触发器。

但它会触发两次,第一次是我进行正常保存时,第二次是我调用事务完成时。所以id的实际使用和引用之间存在不匹配。

所以它给了我错误 - 找不到父键。

我刚刚删除了所有触发器和序列,并在映射文件中添加了生成的类作为增量。 :D

" 生成器 class="increment" "

它非常适合我......

谢谢, 马赫什

【讨论】:

以上是关于NHibernate Oracle - 事务提交问题的主要内容,如果未能解决你的问题,请参考以下文章

NHibernate学习教程--事务Transactions

在Sharp Architecture中使用NHibernate处理嵌套事务

WCF msmq 事务和工作单元

关于mySql 中乐观锁与读已提交(事务隔离级别)的搭配使用问题!!求大神带飞!

ORACLE 10g 自动提交的事务的命令

Oracle学习笔记 深入剖析事务槽及Oracle多种提交方式