2013-02-16 55 views
0

我在Hibernate多对多关系中遇到问题。HIbernate多对多与自我实体使用注释

我有一台名为Projects包含以下字段:

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

我也填充字段名为team项目(多选择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

什么表的样子保存球队?一个人能成为多个团队的一员吗?你能提供一些关于你的数据模型的更多信息吗? – 2013-02-16 09:07:52

+0

例如,** project_id ** 1,1然后** participants_id **可以是2,3,所以团队(用户2和3)将用于项目(包含项目id和参与者id)的表ID 1)。现在你有?对不起,我不是以正确的格式提问。 – 2013-02-16 09:18:21

+0

参与者如何与团队联系?我所追求的是这个团队表的结构,因为它改变了应该如何映射的东西。如果一个参与者有一个团队将被映射不同,如果参与者有1..n个团队。是否particpants_id = team_member_id? – 2013-02-16 09:19:09

回答

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 
); 
+0

Thanx快速回复。问题是我不想为参与者创建表格。我想要项目bean中的参与者字段,并且想要创建表PROJECT_TEAM(PROJECT_ID int,PARTICIPANT_ID int);在项目表中插入数据期间&&&项目表不应该有participa_id列。我们可以使用@Transient或其他。 – 2013-02-16 09:40:15

+0

所以项目表有一个participant_id列?你可以发布这个表的DDL吗? – 2013-02-16 09:41:43

+0

当我插入项目数据,如项目标题,创建日期,项目经理参与者ID。 hibernate应该生成CREATE TABLE PROJECT( PROJECT_ID int, PROJECT_TITLE varchar(50), CREATED_DATE DATE, PROJECT_MANAGER varchar(50) ); CREATE TABLE PROJECT_TEAM( PROJECT_ID int, PARTICIPANT_ID int ); Participants_id是项目Bean的字段(但不是项目表中的列) – 2013-02-16 09:58:25