inverseとcascadeのカップル式の意味は見分けます.
inverseとcascadeは、hibernateにおいては無関係です.inverseは、関連する当事者が関係を放棄する権利を限定するためにのみ使用されます.関連されている一方が関係を維持します.
cascadeはカスケードデータの耐久化を担当しています.簡単に言えば、関連する双方の具体的なデータの持続化を担当します.
例えば、2つのタイプのItem、Bidがあります.ItemからBidまでのペアが多いです.また、inverse=「true」は、以下のように構成されています.
以下のコードは無効です.
bidのamount属性900はデータベースに反応しません.次のコードは有効です.
説明itemとbidの関連はキャンセルされました.データベースに反応しました.itemの構成ファイルを変更して、cascade要素を追加します.
同じコードを実行します.
次にinverseとcascadeはどのように関係がないかをイメージした比喩で説明します.
バーItemとBid類は恋人同士のItem(男性)、Bid(女性)にたとえられています.データベースはカップル登録所です.登録したカップルは必ず二つのタイプのデータを登録しなければなりません.一つは「関係」です.二つはデータです.
inverseは、item 1とbid 1は、男女の友達ではないにもかかわらず、この二人は今日どんな服を着ていますか?inverseは一切関係ありません.item 1とbid 1が別れたら、このような変化の関係をカップル登録所(データベース)に更新します.item 1とbid 1の服は、前回と同じではなくても、カップル登録所に更新されません.
cascadeはこのカップルが着ている服だけです.
例えば、item 1とbid 1はもう一度カップル登録所に来ます.cascadeは今回二人が着ている服だけを更新した登録所(データベース)です.二人は別れに来たのか、それとも結婚したのかは関係なく、それはinverseのことです.
まだ分からないなら、この文章を参考にしてみてもいいです.
http://chen-rojer-gmail-com.iteye.com/admin/blogs/642988
cascadeはカスケードデータの耐久化を担当しています.簡単に言えば、関連する双方の具体的なデータの持続化を担当します.
例えば、2つのタイプのItem、Bidがあります.ItemからBidまでのペアが多いです.また、inverse=「true」は、以下のように構成されています.
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated 2010-4-13 15:36:15 by Hibernate Tools 3.3.0.GA -->
<hibernate-mapping>
<class name="com.hib.entity.Item" table="item" catalog="hibernate">
<id name="itemId" type="java.lang.Integer">
<column name="ITEM_ID" />
<generator class="identity" />
</id>
<property name="sellerId" type="int">
<column name="SELLER_ID" not-null="true" />
</property>
<property name="name" type="string">
<column name="NAME" not-null="true" />
</property>
<set name="bids" table="bid" inverse="false" lazy="false" fetch="select">
<key>
<column name="ITEM_ID" not-null="true" />
</key>
<one-to-many class="com.hib.entity.Bid" />
</set>
</class>
</hibernate-mapping>
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated 2010-4-13 15:36:15 by Hibernate Tools 3.3.0.GA -->
<hibernate-mapping>
<class name="com.hib.entity.Bid" table="bid" catalog="hibernate">
<id name="bidId" type="java.lang.Integer">
<column name="BID_ID" />
<generator class="identity" />
</id>
<many-to-one name="item" class="com.hib.entity.Item" fetch="select" update="false" insert="false">
<column name="ITEM_ID" not-null="true" />
</many-to-one>
<property name="bidderId" type="java.lang.Integer">
<column name="BIDDER_ID" />
</property>
<property name="amount" type="java.lang.Integer">
<column name="AMOUNT" />
</property>
</class>
</hibernate-mapping>
以下のコードは無効です.
item.getBids().iterator.next().setAmout(900);
itemDAO.update(item);
bidのamount属性900はデータベースに反応しません.次のコードは有効です.
item.getBids().clear();
itemDAO.update(item);
説明itemとbidの関連はキャンセルされました.データベースに反応しました.itemの構成ファイルを変更して、cascade要素を追加します.
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated 2010-4-13 15:36:15 by Hibernate Tools 3.3.0.GA -->
<hibernate-mapping>
<class name="com.hib.entity.Item" table="item" catalog="hibernate">
<id name="itemId" type="java.lang.Integer">
<column name="ITEM_ID" />
<generator class="identity" />
</id>
<property name="sellerId" type="int">
<column name="SELLER_ID" not-null="true" />
</property>
<property name="name" type="string">
<column name="NAME" not-null="true" />
</property>
<set name="bids" table="bid" inverse="true" lazy="false" fetch="select" cascade="save-update">
<key>
<column name="ITEM_ID" not-null="true" />
</key>
<one-to-many class="com.hib.entity.Bid" />
</set>
</class>
</hibernate-mapping>
同じコードを実行します.
item.getBids().iterator.next().setAmout(900);
itemDAO.update(item);
この時、amout属性の変化はデータベースに反映されます.次にinverseとcascadeはどのように関係がないかをイメージした比喩で説明します.
バーItemとBid類は恋人同士のItem(男性)、Bid(女性)にたとえられています.データベースはカップル登録所です.登録したカップルは必ず二つのタイプのデータを登録しなければなりません.一つは「関係」です.二つはデータです.
inverseは、item 1とbid 1は、男女の友達ではないにもかかわらず、この二人は今日どんな服を着ていますか?inverseは一切関係ありません.item 1とbid 1が別れたら、このような変化の関係をカップル登録所(データベース)に更新します.item 1とbid 1の服は、前回と同じではなくても、カップル登録所に更新されません.
cascadeはこのカップルが着ている服だけです.
例えば、item 1とbid 1はもう一度カップル登録所に来ます.cascadeは今回二人が着ている服だけを更新した登録所(データベース)です.二人は別れに来たのか、それとも結婚したのかは関係なく、それはinverseのことです.
まだ分からないなら、この文章を参考にしてみてもいいです.
http://chen-rojer-gmail-com.iteye.com/admin/blogs/642988