JPA ManyToOne在一张新表中

时间:2012-04-22 13:47:11

标签: jpa

我有以下表格: 标签,员工,位置。 员工和位置可以有更多标签。我认为最好为这些关系创建新表:employee_tag和location_tag。

如何使用JPA执行此操作?现在我得到了这个: 员工类:

@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的新表,但tag仍然有一个employee_ID列。如何将标签链接到此表?

1 个答案:

答案 0 :(得分:2)

如果您需要单向一对多关联,则不必将员工关联放在标记类中,您必须在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