当JPA插入继承的对象时强制执行FK约束

时间:2010-09-21 13:29:22

标签: orm inheritance jpa

我在JPA中有一个使用联接策略的多级继承模型

@Entity
@Table(name="PARTY")
@Inheritance(strategy=InheritanceType.JOINED)
@DiscriminatorColumn(name="PARTY_TYPE",discriminatorType=DiscriminatorType.STRING)
public class Party implements Serializable{
...
}

@Entity
@Table(name="PARTY_ORG")
@DiscriminatorValue(value="PARTY_ORG") // value in party table's PARTY_TYPE column that dictates an Org.
@PrimaryKeyJoinColumn(name="AFF_PARTY_ORG_ID")
//how children clients and orgs willmap to us.
@Inheritance(strategy=InheritanceType.JOINED)
@DiscriminatorColumn(name="ORG_TYPE_CD")
public class PartyOrg extends Party implements Serializable{
....
}

..继续儿童班

但是每当我尝试插入时,底层DB2数据库都会抛出一个FK约束错误,因为PartyOrg的PK也是一个指向Party的FK。

这意味着JPA必须在尝试持久保存PartyOrg之前保持并刷新Party。 (我已经通过manul SQl验证,插入没有Party的PartyOrg是导致错误的原因。首先插入Party,然后PartyOrg(具有相同的ID)可以正常工作。

SO

我如何告诉JPA首先坚持顶级类来尊重子类/表的FK约束。

1 个答案:

答案 0 :(得分:0)

发现了问题!

DB2数据库正在为PK使用浮点数。当我的DBA说“使用浮动”时,我从不停下来考虑数据库世界和Java世界之间的不匹配。事实证明,DB2“浮动”应该反过来调用Java双打。把所有的钥匙转换成双打后,一切正常。

我只能猜测浮点数中的舍入问题导致FK不匹配 - 但这只是纯粹的推测。