【问题标题】:JPA ManyToOne in a new table新表中的 JPA ManyToOne
【发布时间】:2012-04-22 13:47:10
【问题描述】:

我有以下表格: 标签,员工,位置。 Employee 和 Location 可以有更多标签。我认为最好为这些关系创建新表: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 列。如何将标签链接到此表?

【问题讨论】:

标签: jpa


【解决方案1】:

如果你需要一个单向的一对多关联,你不必将员工关联放在标签类中,你必须在员工类中声明关联。

@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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-03-31
    • 2016-12-27
    • 1970-01-01
    • 2016-11-14
    • 2012-03-31
    • 1970-01-01
    • 2011-10-14
    • 2018-09-04
    相关资源
    最近更新 更多