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处理嵌套事务