daybreaksnow's diary

私を私と呼びたい

[Hibernate]外部キーカラムの保存方法

自動生成のデフォルトで生成される多対一関連のhbmは以下のようになっている。

 <many-to-one name="item" class="sample.Item" fetch="select" cascade="save-update">
   <column name="item_id" />
 </many-to-one>

この場合、itemフィールドにItemオブジェクトをセットし、保存すると、自動的にそのItemのIDがitem_idカラムに保存される。

しかし、毎回Itemオブジェクトをロードしてセットしなければならないのは使いづらい。
IDを直に指定して保存するためには、insert、update属性をfalseにする。

<many-to-one name="item" class="sample.Item" fetch="select" cascade="save-update" insert="false" update="false">
  <column name="item_id" />
</many-to-one>
<property name="itemId" type="java.lang.Long">
  <column name="item_id" />
</property>

これでIDを直にitemIdフィールドのセットした場合でも保存されるようになる。
ただし、逆にitemフィールドにItemをセットしてカスケードで保存した場合に、item_idがセットされなくなってしまう。

IDを直指定でも可能で、Itemを新規作成した場合は採番されたIDをそのままセットするようにするにはどうすればよいのだろうか。