[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をそのままセットするようにするにはどうすればよいのだろうか。