我在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约束。
答案 0 :(得分:0)
发现了问题!
DB2数据库正在为PK使用浮点数。当我的DBA说“使用浮动”时,我从不停下来考虑数据库世界和Java世界之间的不匹配。事实证明,DB2“浮动”应该反过来调用Java双打。把所有的钥匙转换成双打后,一切正常。
我只能猜测浮点数中的舍入问题导致FK不匹配 - 但这只是纯粹的推测。