2017-02-21 3 views
0

私は従業員のリストを含むDepartmentエンティティを持っています。職員1から職員10の従業員リストをdepartmentAが持っているとします。ステップ2で、従業員のリストの下このシナリオでは、休止状態はどのように機能しますか?

Step 1 
     Department dept=(Department)session.get(Department.class, 100); // Department A 


Step 2 

     List<Employee> employees = dept.getEmployees();// it contains employee 1 also 
     Now get employee for id1 from above list and modify the address to address 2   

Step 3 
     Employee emp_step_3=(Employee)session.get(Employee.class, 1); 
     //updates employee address address 3 with session.saveOrUpdate(emp_step_3); 

Step 4  
     session.saveOrUpdate(dept); 

質問

  1. ウィル従業員1オブジェクトがemp_step_3と同じになりますか?
  2. 手順2で既にフェッチされているため、従業員ID 1の手順3でクエリを実行する必要がありますか?
  3. 従業員1の住所2または3を更新する必要がありますか?

FYI、私はステップ2で、従業員のリストの下にあるすべての団体

+0

DepartmentとEmployeeのオブジェクトを共有できますか?これはあなたの質問に答えるのを助けます...うまくいけば。 –

答えて

0

の1-ウィル従業員1オブジェクトのすべてがemp_step_3として を同じになりますカスケードを使用していますか?

はい。ステップ1でその部門のすべての従業員を管理対象セッションにすると、その部門の従業員エンティティが管理エンティティになります。したがって、その従業員の1人をIDで取得すると、Hibernateは同じエンティティを返します。既に ステップ2でフェッチされているように(すべてのカスケードを仮定)

2-クエリ従業員ID 1のためのステップ3で焼成されるべきか?

実際には、あなたが望む従業員を表すエンティティはありません。

3- 2または3従業員の1のために更新されることに対処すべきか?

管理対象エンティティに対処していますか?あなたはそれにカスケードしていますか?住所が変更された従業員を保存すると、関連するエンティティも保存されます。 (再びカスケードする場合はすべてを、カスケードを行う場合はオンにします)また、管理対象のエンティティの場合は、単にアドレスを保存することもできます。

さらに、session.saveOrUpdate(employee)を実行するだけで、変更されていない場合は "dept"を保存する必要はありません。

これは、これらがすべて同じセッション内で発生していることを前提としています。

これが役に立ちます。

+0

あなたは正しいです。これがどうあるべきかです。しかし、実際これは私が観察している行動ではありません。実際に私は実装として休止状態でJPAを使用しています。 JPAはセッションの代わりにエンティティ・マネージャを使用します。それが問題になる可能性があることをご存じですか? –

+0

私は本当にあなたが何を求めているのかは分かりません。何が問題になりうるのか分かっていますか? JPA仕様はHibernateの影響を強く受けていました.JPAの大部分は、実装が何をやっているのかを指定し、HibernateやEclipseLinkのような実装者に任せます。あなたが経験している行動は何ですか?そして、あなたはいくつかのコードを共有できますか? – raminr

関連する問題