使用'互斥' null检查涉及多列hibernate约束

时间:2015-09-07 15:10:43

标签: java hibernate

考虑三个表格。利息日期可以来自主文档或手动覆盖。如果它来自Master Document,则master_doc_id带有引用,如果它来自手动覆盖,则manual_override_id带有引用

    INTEREST_RATE
    id,
    rate,
    master_doc_id,
    manual_override_id

    MASTER_DOC
    id,
    <Master doc related fields>

    MANUAL_OVERRIDE
    id,
    <Manual Overide related fields>

利率来自Master doc或manual override。意思是,任何一个都可以拥有一个id,另一个可以拥有null。永远都不会有值,或者都是空的

MasterDoc和ManualOverride都提供了一对多的兴趣映射

MasterDoc

    <set access="field" name="interestRates" inverse="false" cascade="all-delete-orphan">
        <cache usage="read-write"/>
        <key column="MASTER_DOC_ID"/>
        <one-to-many class="com.foo.foos.InterestRate"/>
    </set>

ManualOverRide

    <set access="field" name="interestRates" inverse="false" cascade="all-delete-orphan">
        <cache usage="read-write"/>
        <key column="MANUAL_OVERRIDE_ID"/>
        <one-to-many class="com.foo.foos.InterestRate"/>
    </set>

这很好用。

但是,我需要强制执行contstraint,其中任何一个都必须有一个值而另一个必须为null。

我试过了。

  1. 在一对多映射中明显不为null。很明显,这会失败,因为两个列都不能同时具有值​​。
  2. 表上的约束,(在数据库中)。但是,hibernate创建一个插入,然后在表上进行更新。即使最终结果有效,约束也会在初始插入后失败。
  3. 前:

    上传初始文件

     insert into master_doc......
     insert into interest_rate.... (with null values in master_doc_id and manual_override_id)
     update interest_rate (set master_doc_id = id of master_doc)
    

    约束在第2行失败。

    任何方式我都可以让它发挥作用。我需要有这个约束,以防止手动更新表。

0 个答案:

没有答案