当 JPA 插入继承的对象时强制执行 FK 约束
Posted
技术标签:
【中文标题】当 JPA 插入继承的对象时强制执行 FK 约束【英文标题】:Enforce FK Constraints when JPA inserts inherited objects 【发布时间】:2010-09-21 13:29:21 【问题描述】:我在 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)工作正常。
所以
我如何告诉 JPA 首先保留***类以尊重子类/表的 FK 约束。
【问题讨论】:
【参考方案1】:发现问题了!
DB2 数据库使用浮点数进行 PK。当我的 DBA 说“使用浮点数”时,我从未停止考虑 DB 世界和 Java 世界之间的不匹配。事实证明,DB2“浮动”应该反过来调用 Java 双精度。在我将所有键都转换为双精度后,一切正常。
我只能猜测浮点数中的舍入问题导致 FK 不匹配 - 但这纯粹是猜测。
【讨论】:
以上是关于当 JPA 插入继承的对象时强制执行 FK 约束的主要内容,如果未能解决你的问题,请参考以下文章