カスケード操作がmany_to_one関連するオブジェクトにカスケード接続することができる場合1.Cascadeカスケード演算は、次のコードが保存されたカテゴリオブジェクトをカスケード接続することができます。
マッピングファイルのブックに設定してください
<多対一名=「カテゴリ」欄=「CID」カスケード=「セーブ・アップデートを」/>
あなたが本を保存すると、カテゴリに対応したブックが保存されていない場合、最初は保存してブックカテゴリを保存し、データを保存するために、アクションのカスケードを完了する。
カスケードのデフォルトはなし、ではないカスケード操作ではありません。
カスケードは、カスケードmany_to_oneで、削除することができます一つは、外部キーに基づいてされていない限り、それは、例外を作成しているため、削除に設定されていません。
カスケードはまた、すべての、すべてのあなたはすべてのアクションをカスケードできることを示していると思います。
カスケードのONE_TO_MANYで:
<! -双方向の多くの設定- > <SET名= " ブック " カスケード = "保存-アップデートを"> <! -外部キー- > <キー列= "CID"> </キー> <! -終わり、複数の種類の設定- > <一対多クラス = "ブック" /> </ SET>
データを保存するときに、オブジェクト間の関係は、マルチポートデータが保存されていない、それは本を節約するためにカスケードます見つかった場合は最後に、;しかし一端に保存カスケード、n個の更新ステートメントのよりなり、効率が比較的低いです。(即ち、カスケードの最終用途は、非効率的なn個の更新ステートメントを複数保存されている場合、カスケードマルチしたがって推奨、一端での使用のために推奨されていません)
カスケード=一端で「削除」場合は、データを削除すると、その後、最後に、すべてのデータは、マルチポートが削除カスケードます。(注意)
注意:カスケードが動作するように、関連するオブジェクトを設定してください。関連するオブジェクトが存在しない場合は、何のカスケード効果はありません。以下のカスケードを使用することをお勧め、あなたも持っていません。
2. 逆:者管理(CRUD)休止状態で(外部キー)の端に制御関係を逆。
<! -双方向の多くの設定- > <SET名= "ブック"カスケード= "保存・更新を" 逆 = "trueに"> <! -外部キー- > <キー列= "CID" > </キー> <! -マルチの一方の端部に配置されたタイプ- > <一対多クラス = "ブック" /> </ SET>
これは、ブック(すなわち、マルチ端)の端部を維持するために、関係(外部キー)を示しています。それはCategoryオブジェクトを予約する対応するオブジェクトの属性を設定するには良い本です、外部キーは、(保存)を維持します。
@Test 公共 ボイドtestInit(){ セッションセッション = NULL ; トランザクションTX = nullを。 試す{ セッション = HibernateUtil.getSession()。 TX = session.beginTransaction()。 カテゴリーC1 = 新しいカテゴリー( "计算机类" ); カテゴリーC2 = 新しいカテゴリー( "文学" )。 カテゴリーC3 = 新しいカテゴリー( "历史" ); SimpleDateFormatのDF= 新しいのSimpleDateFormat( "YYYY-MM-DD" ); ブックB1 = 新しいブック( "ジャワ"、 "日"、30、df.parse( "1995年5月23日" )); b1.setCategory(C1) 。 ブックB2 = 新しいブック( "ストラット"、 "アパッチ"、40、df.parse( "2006-09-12" )); b2.setCategory(C1)。 ブックB3 = 新しいブック( "明朝那些事儿"、 "当年明月"、70、df.parse( "2008-05-23" )); b3.setCategory(C3)。 ブックB4 = 新しいブック( "水浒传"、 "老撕"、20、df.parse(」 c1.getBooks()(b1)を追加します。 c1.getBooks()(b2)を追加します。 c2.getBooks()(B4)を追加します。 c3.getBooks()(B3)を追加します。session.save(C1)。 session.save(C2)。 session.save(C3)。 tx.commit(); } キャッチ(例外e){ 場合(TX!= NULL ) tx.rollback(); } 最後に{ HibernateUtil.close()。 } }
偽逆=、メンテナンス終了の関係を説明することができるならば、それは、一方の端部に複数のデータの端を追加することによって言うことを外部キーの関係を保持することです。
@Test 公共 ボイドtestInit(){ セッションセッション = NULL ; トランザクションTX = nullを。 試す{ セッション = HibernateUtil.getSession()。 TX = session.beginTransaction()。 カテゴリーC1 = 新しいカテゴリー( "计算机类" ); カテゴリーC2 = 新しいカテゴリー( "文学" )。 カテゴリーC3 = 新しいカテゴリー( "历史" ); SimpleDateFormatのDF= 新しいのSimpleDateFormat( "YYYY-MM-DD" ); ブックB1 = 新しいブック( "ジャワ"、 "日"、30、df.parse( "1995年5月23日" )); ブックB2 = 新しいブック( "ストラット"、 "アパッチ"、40、df.parse( "2006-09-12" )); ブックB3 = 新しいブック( "明朝那些事儿"、 "当年明月"、70、df.parse( "2008-05-23" )); ブックB4 = 新しいブック( "水浒传"、 "老撕"、20、df.parse( "1985年5月23日" )); c1.getBooks()(b1)を追加します。 c1.getBooks()(b2)を追加します。 c2.getBooks()(B4)を追加します。 c3.getBooks()(B3)を追加します。session.save(C1)。 session.save(C2)。 session.save(C3)。 tx.commit(); } キャッチ(例外e){ 場合(TX!= NULL ) tx.rollback(); } 最後に{ HibernateUtil.close()。 } }
ただし、更新ステートメントによって完成されます。したがって、通常の状況、逆=真下。
最終的にはあまり逆に、多くのエンドのデフォルトは関係を維持することができますので。
注:関連するオブジェクトは、どちらも動作しません場合は、カスケードと逆の関連オブジェクトは、によって達成されます。両方の設定の場合は、関係を管理するカスケードを、管理者を区別します。関連するターゲットの管理と関係管理カスケードの両方があるかもしれません。