双方向多くの関連マッピングのJavaの休止

例えば、1は、権利管理で、ロールとパーミッションの関係は、多くのテーブル構造です。

2.クラスの構造

Role.java

パブリック クラス の役割は、 実装Serializableを{
     プライベート int型のIDを、
    プライベート文字列名;
    プライベート設定<許可>パーミッション= 新しい HashSetの<許可> () ;
    パブリックロール(){ 
    } 
    公共の役割(文字列名){
         スーパー()。
        この .nameの= 名前; 
    } 

    公共 INT のgetId(){
         戻りID。
    } 
    公共 ボイド SETID(int型のID){
         この .ID =ID; 
    } 
    パブリック文字列のgetName(){
         戻り名。
    } 
    公共 ボイドのsetName(文字列名){
         この .nameの= 名前。
    } 
    パブリックセット<許可> getPermissions(){
         戻りパーミッション。
    } 
    公共 ボイド setPermissions(セット<権限> 権限){
         この .permissions = パーミッション。
    } 
}

Permisssion.java

パブリック クラス 許可が 実装Serializableを{
     プライベート int型のIDを、
    プライベート文字列名;
    プライベート設定<役割> 役割パブリック許可(){
         // TODO自動生成コンストラクタスタブ
    } 
    
    パブリック許可(文字列名){
         スーパー()。
        この .nameの= 名前; 
    } 

    公共 INT のgetId(){
         戻りID。
    } 
    公共 ボイド SETID(int型のID){
        この .ID = ID。
    } 
    パブリック文字列のgetName(){
         戻り名。
    } 
    公共 ボイドのsetName(文字列名){
         この .nameの= 名前。
    } 

    公共のセットの<role> getRoles(){
         返す役割を、
    } 

    公共 ボイド setRoles(セット<役割> 役割){
         この .rolesの=の役割。
    } 
}

3.マッピングファイル情報

Role.hbm.xml

<休止状態マッピングパッケージ = "cn.sxt.pojo"> 
    < クラス名= " ロール "テーブル=" t_role "> 
        <ID名=" ID "> 
            <ジェネレータクラス ="天然"> 
            </ジェネレータ> 
        </ ID > 
        <プロパティ名= "名前" /> 
        < 設定名= "権限"表= " t_role_permission "> 
            <! -当前类在连接表中的外键- > 
            <キー列=" RID"> </キー> 
            < 多対多列=「PID」クラス = "許可"> </多対多の> 
        </設定> 
    </ クラス >
</休止状態マッピング>

Permission.hbm.xml

<休止状態マッピングパッケージ = "cn.sxt.pojo"> 
    < クラス名= " 許可 "テーブル=" t_permission "> 
        <ID名=" ID "> 
            <ジェネレータクラス ="天然"> 
            </ジェネレータ> 
        </ ID > 
        <プロパティ名= "名前" /> 
        < 設定名= "役割" 表= "t_role_permission"  逆= "true"を > 
            <! -当前类在连接表中的外键- > 
            <キー列= "PID "> </ key>の
            <多対多列=" RID」クラス = "役割"> </多対多の> 
        </設定> 
    </ クラス >
</休止状態マッピング>

4.テスト

パブリック クラスHibernateTest {
     / ** 
     * データベースの作成ツール方法
     * * / 
    @Test 
    公共 無効testCreateDB(){ 
        設定CFG = 新新設定()の設定();. 
        SchemaExportのSE = 新しい新しいSchemaExportの(CFG);
         // 最初のSQLスクリプト印刷パラメータかどうか
         // データベースエクスポートスクリプト実行の2番目のパラメータであれば 
        (se.create trueに真の); 
    } 
    / ** 
     * 初期化テーブルデータ
      * / 
    @Test 
    公共 ボイドtestInit(){ 
        セッションセッション = nullの; 
        トランザクションTX = ヌル;
         試み{ 
            セッション = HibernateUtil.getSession(); 
            TX = session.beginTransaction(); 
            許可P1 = 新新許可( "ユーザーの追加" ); 
            パーミッションP2 = 新新許可( 「ユーザーを削除」); 
            パーミッションP3 = 新しい新しい許可(「クエリーユーザー" ); 
            パーミッションP4 = 新しい新しい許可(」ユーザーを変更します」); 
            
            ロールR1 = 新しい役割( "管理员" );
            r1.getPermissions()(P1)を追加します。
            r1.getPermissions()(P2)を追加します。
            r1.getPermissions()(P3)を追加します。
            r1.getPermissions()(P4)を追加します。
            役割R2 = 新しい役割( "VIP" )。
           r2.getPermissions()(P3)を追加します。
            r2.getPermissions()(P4)を追加します。
            
            session.save(P1)。
            session.save(P2)。
            session.save(P3)。
            session.save(P4)。
            session.save(R1)。
            session.save(R2)。
            tx.commit();
            
        } キャッチ(例外e){
             場合(TX!= NULL 
                tx.rollback(); 
        } 最後に{ 
            HibernateUtil.close()。
        } 
    } 
    / ** 
     * / 
    @Test 
    公共 ボイドtestGetData(){ 
        セッションセッション = HibernateUtil.getSession()。
        役割役割 =(役割)session.get(役割。クラス、1 )。
        System.out.println(role.getId() + "---" + role.getName()); 
        System.out.println( "-------------");
        (許可P:role.getPermissions()){ 
            System.out.printlnは(p.getId() + "---" + p.getName())。
        } 
        のSystem.out.println( "==========================" )。
        許可P =(許可)session.get(パーミッション。クラス、3 ); 
        System.out.println(p.getId() + "----" + p.getName());
        (ロールR:p.getRoles()){ 
            System.out.printlnは(r.getId() + "---" + r.getName())。
        } 
        HibernateUtil.close()。
    } 
}

 

おすすめ

転載: www.cnblogs.com/Vincent-yuan/p/11204764.html