考虑三个表格。利息日期可以来自主文档或手动覆盖。如果它来自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。
我试过了。
前:
上传初始文件
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行失败。
任何方式我都可以让它发挥作用。我需要有这个约束,以防止手动更新表。