Transfer の迷宮をさまよい中。
とりあえず、以前書いた
<objectDefinitions>
<package name="master">
<!-- Category -->
<object name="Category" table="CATEGORYMST">
<id name="CategoryId" type="numeric" column="categoryid" />
<property name="CategoryName" type="string" column="categoryname" />
<onetomany name="CategoryItemLink" lazy="true">
<link to="master.Item" column="CategoryId" />
<collection type="struct">
<key property="ItemId" />
</collection>
</onetomany>
</object>
<!-- Item -->
<object name="Item" table="ITEMMST" sequence="ITEMMST_itemid_seq">
<id name="ItemId" type="numeric" column="itemid" generate="false" />
<property name="ItemName" type="string" column="itemname" />
<property name="Price" type="numeric" column="price" />
<manytoone name="ItemCategoryLink" lazy="true">
<link to="master.Category" column="categoryid" />
</manytoone>
</object>
</package>
</objectDefinitions>
は、だめのようだ。
<objectDefinitions>
<package name="master">
<!-- Category -->
<object name="Category" table="CATEGORYMST">
<id name="CategoryId" type="numeric" column="categoryid" />
<property name="CategoryName" type="string" column="categoryname" />
<onetomany name="CategoryItemLink" lazy="true">
<link to="master.Item" column="CategoryId" />
<collection type="struct">
<key property="ItemId" />
</collection>
</onetomany>
</object>
<!-- Item -->
<object name="Item" table="ITEMMST" sequence="ITEMMST_itemid_seq">
<id name="ItemId" type="numeric" column="itemid" generate="false" />
<property name="ItemName" type="string" column="itemname" />
<property name="Price" type="numeric" column="price" />
</object>
</package>
</objectDefinitions>
外部参照なわけで、相互に参照するような設定にしてはいけない。
相互に参照しないと、双方から参照できないと思っていたら、そんなことはないようだ。
カートのデータをデータベースに登録するプログラムに変更しようとして、面倒な問題に直面。
カートのデータを全消去というコードがなんとも、面倒だ。
もちろん、従来のO-R マッピングを利用しない書き方に比べて面倒ということではなく、折角の Transfer が意味のないコードになってしまうということだ。
やっぱり、Transfer を意識したテーブル設計をしなければならない。
テーブル CARTDATA をヘッダと明細に分けよう。
さて、引き続き、さまようか。