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

0 票否决

嗨,

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

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

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

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

你能帮帮我吗?

马赫什....

【问题讨论】:

  • 你是如何映射实体的?是否存在 HasMany 关系或其他关联?

标签: oracle nhibernate


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    2 个选择:

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

    【讨论】:

      【解决方案3】:

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

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

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

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

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

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

      " 生成器 class="increment" "

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

      谢谢, 马赫什

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-12-09
        • 1970-01-01
        • 2012-03-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多