2012-04-22 46 views
0

我有以下表格: 標籤,員工,位置。 員工和位置可以有更多標籤。我認爲最好爲這些關係創建新表:employee_tag和location_tag。JPA ManyToOne在新表中

如何使用JPA執行此操作?現在,我得到這個: Employee類:

@OneToMany() 
@JoinTable(name="employee_tag", joinColumns={ 
    @JoinColumn(name="ID_employee", referencedColumnName="ID") 
}, inverseJoinColumns={ 
    @JoinColumn(name="ID_tag", referencedColumnName="ID") 
}) 
private Collection<Tag> tags; 

標籤類:

@ManyToOne() 
private Employee employee; 

它創建了一個新表命名employee_tag但標籤仍然有一列EMPLOYEE_ID。如何將標籤鏈接到此表?

+1

見http://stackoverflow.com/questions/5165743/spring-roo-hibernate-一對多關係創建附加表 – axtavt 2012-04-22 14:11:09

+0

Oke很好,所以我想要的幾乎是默認的。但標籤表中仍然有一個employee_ID。 – Klaasvaak 2012-04-22 19:19:57

回答

1

如果您需要單向一對多關聯,則您不必將員工關聯放入標記類中,您必須在Employee類中聲明關聯。

@Entity 
public class Employee { 
    @OneToMany() 
    @JoinTable(name="employee_tag", joinColumns={ 
    @JoinColumn(name="ID_employee", referencedColumnName="ID") 
    }, inverseJoinColumns={ 
    @JoinColumn(name="ID_tag", referencedColumnName="ID") 
    }) 
    public Collection<Tag> tags; 
    ... 
} 

@Entity 
public class Tag {  
    ... 
} 

否則,你可以如下做到雙向關聯:

@Entity 
public class Employee { 
    @OneToMany(mappedBy="troop") 
    public Collection<Tag> tags; 
    ... 
} 

@Entity 
public class Tag { 
    @ManyToOne 
    @JoinColumn(name="employee_fk") 
    public Employee employee; 
    ... 
} 

看看hibernate annotations doc