具有自我实体的HIbernate多对多使用注释

时间:2013-02-16 08:52:07

标签: java spring hibernate java-ee hibernate-annotations

我在Hibernate中遇到很多关系。

我有一个名为Projects的表,其中包含以下字段:

  

(项目编号,项目名称,创建日期,项目经理)

我还为项目填充了一个名为team的字段(Multiple select Combobox),它关联多个项目成员。

因此,当我使用Hibernate将项目数据保存到Projects表中时,我希望生成另一个名为Project_team的表。它应包含以下字段:

  

(project_id,team_member_id)

例如,如果我输入数据(项目标题=“ERP”,创建日期=“16/2/1013”,项目经理=“XYZ”),我应该有另一个表project_team(project_id = 1,team_member_id = 1)。

是不是很多很多关系还是其他人?我应该为Team_member制作另一个bean,然后我将不得不执行多对多吗?

1 个答案:

答案 0 :(得分:1)

您需要创建一个联结表来处理TeamProject之间的多对多关联,但是您不需要此联结表的bean或类。以下示例将在PROJECTPARTICIPANT之间创建单向关联。您需要创建TEAM_MEMBERPARTICIPANT表才能执行此关联。

<强> 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
);