私は古典的な1対多の関係を持っており、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();
したがって、子の他の値を子テーブル列に渡すことができます。親PKだけが子のFK列に到達していません。
ここでは、XMLドキュメントの値をデータベースに永続化しています。このために、JAXBを使用してXMLをJavaオブジェクトにマーシャリングしてから、Hibernateを使用してオブジェクトを永続化します。このようにして、JAXBで生成されたクラスをHibernateで再利用していますが、これらのPK要素とFK要素はXMLに存在しません。これらはデータベースに固有です。