0

使用される休止状態のエンティティ。DBにはエンティティと適切なテーブルAddressがあります。複数のを持つことができます。Room
AddressRoom

両方のテーブルにはがaddress_Idあり、customerEmailAddress
これらの列はテーブルにありFKRoomテーブルを参照していAddressます。

AddressDBにはすでにレコードがあります。アドレス
にいくつかの部屋を追加する必要があります。this

Addressとの間の注釈を使用してHibernate関係を編成する方法Room。したがって、Roomテーブルはアドレスからの適切な属性で更新されます
address_IdcustomerEmailAddress

Java部分は次のようになります。

    Room room = new Room();
    Address addr  = someService.getAddressFromSession();
    room.add(addr);
    entityManager.persist(room);
    Room room2 = new Room();
    room2.add(addr);
    entityManager.persist(room2);

DBの結果(ルームテーブル)は次のようになります:
id || addressId || customerEmailAddress
1 || 3 || mail3@a.com
2 || 3 || mail3@a.com

4

1 に答える 1

1

両方のテーブルの主キーについては言及していません。両方のテーブルに独自の主キーがあると仮定すると、以下のようにコンポーネント モデルを使用してAddressRoomオブジェクトの間で標準的なマッピングを行うことができると思います。

  1. address_idおよびコンポーネントcustomerEmailAddressとしてマップします。コンポーネント マッピングについては、 Hibernate Component Mappingのドキュメントを参照してください。

  2. 上記で定義されたコンポーネントを使用して関係を追加roomsし、 に設定します。AddressOne-To-ManycascadeAll

  3. 上で定義したコンポーネントを使用して追加addressします。RoomMany-To-One

  4. 以下のように(概念的に) 1つのaddRoomメソッドを定義します。Address

      public void addRoom(Room room){
           if(this.rooms == null){
               this.rooms = new ArrayList<Room>();
           }
           room.setAddress(this);
           this.rooms.add(room);
      } 
    
  5. これで、レベルで簡単に作業できAddressます。を保存するにはroom、 を に追加しroomaddressアドレスを保存します。

お役に立てれば!

于 2012-10-14T04:39:45.580 に答える