2012-03-04 4 views
0

私はJPAに疑問を持っています。私は1つの社員テーブルとプロジェクトテーブルを持っています。値がEmployeeとProjectテーブルに保存されるとき、関係はありません。シナリオはまず、管理者が従業員とプロジェクトを作成できる必要があります。その後のプロジェクトマネージャは、各従業員を異なるプロジェクトに割り当てます。ここで、employee_project_assignmentというテーブルに値を書き込む方法はありますか?JPAエンティティの設計提案

employee_id project_id 
----------- ---------- 
100  ABC987 
100  DEF876 
101  ABC987 
102  DEF876 

UIは次のようになります。

EmployeeProjectAssignmentフォームが来ると、プロジェクトマネージャはドロップダウンから異なるプロジェクトから1つのプロジェクトを選択します。そして、彼はそのプロジェクトに欲しい複数の従業員を選びます。この の中で。では、このEmployeeProjectAssignmentフォームのエンティティを作成するにはどうすればいいですか?

答えて

3

上記の表は、EmployeeとProject間のManyToManyの関連付けを実現するために使用される純粋な結合表です。

従業員エンティティは、プロジェクトのコレクションを持つことができます。また、プロジェクトエンティティは従業員のコレクションを持つことができます(つまり、従業員からプロジェクトへの単方向性、プロジェクトから従業員への一方向性、双方向性)。

あなたのニーズに合った種類の関連付けを決めることができます(一般的に、双方向性の方が生活が楽になります)。双方向の場合は、どちらの側がアソシエーションの所有者であるかを選択します(オーナー側は@JoinTable注釈があり、もう一方の側にはmappedBy属性があります)。次に、フォーム処理メソッドでコレクションを移入します。所有側は、JPAが関連付けを維持するために必要な側です。

employee.getProjects().clear(); 
employee.getProjects().addAll(projectsSelectedByAdministrator); 
+0

しかし、ここでは、従業員のエンティティは、プロジェクトへの参照が含まれていません:

は所有側が従業員であるとします。従業員のエンティティを独立したものとして保存します。後で、従業員を割り当てによって割り当てます。 – user414967

+0

これは、従業員のプロジェクトのコレクションが最初は空であることを意味します。従業員をプロジェクトに割り当てずに作成します。 –

+0

OK。私はほとんどそのアイデアを手に入れました。ありがとう。しかしもう一つの質問。後でプロジェクト/プロジェクトを従業員に割り当てると、従業員エンティティ自体がデータベースに再度保存されますか?サンプルコードを教えてください。 – user414967

関連する問題