0

Hibernateの多対多の関係に問題があります。

Projects次のフィールドを含む1つのテーブルがあります。

(プロジェクトID、プロジェクトタイトル、作成日、プロジェクトマネージャー)

teamまた、複数のプロジェクトメンバーを関連付けるproject(Multiple select Combobox)というフィールドにデータを入力します。

Projectsしたがって、 Hibernateを使用してプロジェクトデータをテーブルに保存するときに、呼び出される別のテーブルProject_teamを生成する必要があります。次のフィールドが含まれている必要があります。

(project_id、team_member_id)

たとえば、(Project Title = "ERP"、Created Date = "16/2/1013"、Project Manager = "XYZ")のようなデータを入力すると、別のテーブルproject_team(project_id = 1、team_member_id = 1)が必要になります。

それは自己多対多の関係でしょうか、それともそうではありませんか?Team_member用に別のBeanを作成する必要があります。そうすると、多対多を実行する必要がありますか?

4

1 に答える 1

1

Teamaと a の間の多対多の関連付けを処理するには、ジャンクション テーブルを作成する必要がありますProjectが、このジャンクション テーブルには Bean またはクラスは必要ありません。PROJECT次の例では、との間に一方向の関連付けを作成しますPARTICIPANT。この関連付けを実行するには、TEAM_MEMBERまたはテーブルを作成する必要があります。PARTICIPANT

Projects.java

public class Project{

@ManyToMany(cascade={CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH}, targetEntity = Participant.class)
@JoinTable(name = "PROJECT_TEAM", joinColumns = { @JoinColumn(name = "TEAM_MEMBER_ID", referencedColumnName = "PROJECT_ID") }, 
inverseJoinColumns = { @JoinColumn(name = "PARTICIPANT_ID", referencedColumnName = "PARTICIPANT_ID") })

    private List<Participant> team = new ArrayList<Participant>();

    //Accessors - get/setTeam method
}

この回答は、次のデータ モデルが整っていることを前提としています。

CREATE TABLE PROJECT(
   PROJECT_ID int,
   PROJECT_TITLE varchar(50),
   CREATED_DATE DATE,
   PROJECT_MANAGER varchar(50)
);

CREATE TABLE PARTICIPANT(
   PARTICIPANT_ID int,
   NAME varchar(50),
   PROJECT_ID int
);

CREATE TABLE PROJECT_TEAM(
   PROJECT_ID int,
   PARTICIPANT_ID int
);
于 2013-02-16T09:29:22.360 に答える