これは、リストのコレクションマッピングマップを説明します
1.は、一般的に休止状態を使用して収集、処理のために完了するように設定されています。しかし、また、それにはいくつかのコレクションの他のマッピング休止状態を提供します。
リストマッピングは、リストのセットを注文している、ここで実装なので、テーブル内のデータの順序が必要です。
一般的に、多くのコレクションで見つかった2マッピングは、ユースケースは、カテゴリと本です
3.クラス構造
Book.java
パブリック クラス ブックが 実装Serializableを{ プライベート int型のIDを、 プライベート文字列名; プライベート文字列の作者。 プライベート ダブル価格。 プライベート日付pubDateの。 パブリックブック(){ } 公共ブック(文字列名、文字列の作者、二重価格、日付pubDateの){ スーパー(); この .nameの= 名前; この .author = 作者。 この .price = 価格。 この.pubDate = pubDateの。 } 公共 INT のgetId(){ 戻りID。 } 公共 ボイド SETID(int型のID){ この .ID = ID。 } パブリック文字列のgetName(){ 戻り名。 } 公共 ボイドのsetName(文字列名){ この .nameの= 名前。 } パブリック文字列GETAUTHOR(){ 戻り著者。 } 公共 ボイドSETAUTHOR(文字列の作成者){ この.author = 著者。 } 公共 ダブルgetPrice(){ 戻り価格。 } 公共 ボイド setPrice(二重価格){ この .price = 価格。 } 公共日getPubDate(){ 戻りpubDateのを、 } 公共 ボイドsetPubDate(日付pubDateの){ この .pubDate = pubDateの。 } @Override パブリック文字列のtoString(){ リターン"ブック[ID =" + ID + "名=" +名+ "著者=" +著者+ "価格=" +価格+ "pubDateの=" + pubDateの + "]" ; } }
Category.java
パブリック クラス 分類は、 実装Serializableを{ プライベート int型のIDを、 プライベート文字列名; プライベートリスト<ブック>ブック= 新しい ArrayListを<> () ; 公共部門(){ } 公共部門(文字列名){ スーパー()。 この .nameの= 名前; } 公共 INT のgetId(){ 戻りID。 } 公共 ボイド SETID(int型のID){ この .ID =ID; } パブリック文字列のgetName(){ 戻り名。 } 公共 ボイドのsetName(文字列名){ この .nameの= 名前。 } 公共の一覧<ブック> はgetBooks(){ 返す本を。 } 公共 ボイド setBooks(一覧<ブック> 書籍){ この .booksの=の書籍。 } }
4.マッピングファイル
Book.hbm.xml
<休止状態マッピングパッケージ = "cn.sxt.pojo"> < クラス名= " ブック "表=" t_book "> <ID名=" ID "> <ジェネレータクラス ="ネイティブ"> </ジェネレータ> </ ID > <プロパティ名= "名前" /> <プロパティ名= "著者" /> <プロパティ名= "価格" /> <プロパティ名= "pubDateの" /> </ クラス > </休止状態マッピング>
Category.hbm.xml
<休止状態マッピングパッケージ = "cn.sxt.pojo"> < クラス名= " カテゴリ "テーブル=" t_category "> <ID名=" ID "> <ジェネレータクラス ="天然"> </ジェネレータ> </ ID > <プロパティ名= "名前" /> <! - 一对多的关联映射 - > < リスト名= " 図書 "> <キー列=" CID"> </ key>の <! - IDX有休止来进行维护- > < インデックス列=」IDX "/> <1対多のクラス ="ブック"/> </リスト> </クラス > </休止状態マッピング>
5.テスト
パブリック クラスHibernateTest { / ** *データベーステーブルを生成する方法を意味する * * / @Test 公共 ボイドtestCreateDB(){ 設定CFGは = 新しい新しい構成()を設定();. SchemaExportのSE = 新しい新しいSchemaExportの(CFG); // 最初のSQLスクリプト印刷パラメータかどうか // データベースエクスポートする実行スクリプトの2番目のパラメータであれば (se.createをtrueに、trueに); } / ** *テーブルデータの初期化 多くのデータを保持するために使用されるモード*を行います更新された外部キー更新文の 多く-効率的な方法よりも低い*効率 * / @Test 公共 ボイドtestInit(){ セッションセッション = NULL ; トランザクションTX = nullを。 試す{ セッション = HibernateUtil.getSession()。 TX = session.beginTransaction()。 カテゴリーC1 = 新しいカテゴリー( "计算机类" ); カテゴリーC2 = 新しいカテゴリー( "文学" )。 カテゴリーC3 = 新しいカテゴリー( "历史" ); SimpleDateFormatのDF = 新しいですSimpleDateFormat( "MM-DD-YYYY" ); ブックB1 = 新しい新しいブック( "ジャワ"、 "日"、30、df.parse( "1995年5月23日" )); ブックB2 = 新しい新しいブック( "Strutsの" "アパッチ"、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); Session.save(B1); Session.save(B2); Session.save(B3); Session.save( B4); tx.commit(); } キャッチ(例外E){ IF(TX =!ヌル) tx.rollback(); } 最後に{ HibernateUtil.close(); } } / ** *データの最後にクエリの数データを得ることができる場合の一端 * / @Test 公共 ボイドtestGetData(){ セッションsession = HibernateUtil.getSession(); カテゴリC1 =(カテゴリ)session.get(カテゴリ。クラス、1 )。 System.out.println(c1.getId() + "----" + c1.getName()); System.out.println( "-----------------" ); 用(ブックブック:c1.getBooks()){ System.out.printlnは(書籍); } HibernateUtil.close()。 } }