2017-02-06 7 views
1

私は以下のようなテーブルを持って、休止子テーブル更新親オブジェクト

役割:

Role_Id Role_Name 
201  Manager 
202  Supervisor 

ユーザー:

User_ID User_Name Role_Id 
1   John  201 
2   Peter  202 
3   Raj  202 

私はPOJOを作成し、両方のテーブルのためのマッピングファイルを休止しています。

マッピングファイル:

//RoleVO 
<class name="RoleVO" table="tbl_Role"> 
     <id name="roleId" column="role_Id" > 
      <generator class="identity"/> 
     </id> 
     <property name="roleName" column="Role_Name" /> 
</class> 

//UserVO 
<class name="UserVO" table="tbl_User"> 
     <id name="userId" column="user_Id" > 
      <generator class="identity"/> 
     </id> 
     <property name="userName" column="User_Name" /> 
     <many-to-one name="Role" class="RoleVO" column="Role_Id"/> 
</class> 

私は休止状態からのユーザー表にユーザーの詳細を挿入すると、私は役割REFを取得し、ユーザーオブジェクトに直接それを設定する必要があり、私はUserテーブルに「ロールID」を追加することができます。用など。

//First approach: 

UserVO usr = new UserVO(); 
usr.serUserName("Kumar"); 
usr.setRoleId(202); 
session.save(usr); 

or 

//Second Approach: 

UserVO usr = new UserVO(); 
usr.serUserName("Kumar"); 
RoleVO role = session.get(RoleVO.class, 202); 
usr.setRole(role); 
session.save(usr); 

最善のアプローチである

?最初か二番目?

+0

ハイバーネーションマッピングコードを書くことができますので、SOユーザーが適切な回答を得ることができますか? –

+0

2番目の方法であるIMHOは、 '多対1 'の関連付けで冬眠するように指示したように、' Role'オブジェクトに数値を渡さないようにする最初の方法は機能しません。冬眠はOriented Relational Mappingフィールド用でないオブジェクト用! –

+0

私は 'new UserVO(" Kumar "、session.get(RoleVO.class、202))'のようなことをして、 'UserVO'を構築できるように引数を取るコンストラクタを追加するという考えも考えてみましょう。 – Naros

答えて

0

ユーザーロールの関連付けが多対1の一方向の関連付けであると仮定します。

設定UserVOインスタンス内RoleVOオブジェクトは、マッピングファイルとしてハイバネート使用してデータベースにUserVoオブジェクトを挿入するために使用するための唯一の方法であるが示しています

<many-to-one name="Role" class="RoleVO" column="Role_Id"/> 

だからあなたのデータベース内のユーザーの詳細オブジェクトを挿入するには、あなたかもしれません書き込み:

UserVO user = new UserVO(); 
//Set user info 
    ... 
RoleVO role = (RoleVO) session.get(RoleVO.class, 202); 
user.setRole(role); 
session.save(user); 

詳細については、hibernate tutorialをチェックすることをお勧めします。

関連する問題