2013-02-16 95 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

相關問題