我有一个经典的一对多关系,在使用 Hibernate 保存它时,我无法将父级的 PK 列值传递给子级的 FK 列。
家长班
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private int holdingPK;
@OneToMany(mappedBy="holding",targetEntity=PolicyType.class,fetch=FetchType.LAZY, cascade = CascadeType.ALL)
@XmlElement(name = "Policy")
private Set<PolicyType> policy;
儿童班
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private int policyPK;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name="HoldingFK",nullable = false)
private HoldingType holding;
这HoldingPK
是一个自动生成的表示主键的序列列。当我插入一个 Holding 行时会生成值。所以我想动态地将 HoldingPK 值传递给孩子的HoldingFK
列。
测试代码
HoldingType obj = new HoldingType();
obj.setCurrencyTypeCode("6");
obj.setHoldingKey("123");
Set<PolicyType> set = new TreeSet<PolicyType>();
PolicyType policy = new PolicyType();
policy.setJurisdiction("Haha");
set.add(policy);
obj.setPolicy(set);
session.save(obj);
transaction.commit();
所以我可以将 Child 的其他值传递给 Child Table 列,只是 Parent PK 没有到达 Child 的 FK 列。
在这里,我将 XML 文档值保存到数据库中。为此,我使用 JAXB 将 XML 编组为 Java 对象,然后使用 Hibernate 持久化对象。通过这种方式,我使用 Hibernate 重用 JAXB 生成的类,这些 PK 和 FK 元素在 XML 上不存在。这些是特定于数据库的。