Hibernate在类中存储字段

时间:2015-06-06 20:04:34

标签: java hibernate orm relational-database

我有两个班,有两个单独的表,“员工”和“公司”。我想在公司课程中保留一份员工名单。这很简单,但我不知道如何在数据库方面表示这个列表。

班级'公司':

@Entity
@Table(name = "company")
public class Company {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id")
    private Integer id;

    @Column(name = "name")
    private String name;

    private List<Employee> employeeList;

}

班级'员工':

@Entity
@Table(name = "employee")
public class Employee {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id")
    private Integer id;

    @Column(name = "name")
    private String name;

    @Column(name = "age")
    private Integer age;

如果没有休眠,我会选择设计创建另一个包含两列'employeeId'和'companyId'的表,并尝试让所有员工使用'employeeId'匹配'companyId'。我不知道是否可以在休眠状态下执行相同操作。如果是这样的话?如果没有,你的解决方案是什么?

2 个答案:

答案 0 :(得分:1)

我认为您需要在公司和员工之间实施oneToMany关系。 Hibernate @OneToMany注释可以用于相同的。

Here是显示如何在Hibernate

中执行此操作的示例

答案 1 :(得分:1)

简短的回答是,你可以配置Hibernate生成一个30表来存储你想要的关联。 您可以使用@JoinTable注释来实现此目的。按照你的例子,它将是:

@Entity
@Table(name = "company")
public class Company {
...
@OneToMany// or @ManyToMany
@JoinTable(name = "table_name",
    joinColumns = @JoinColumn(name="employeeId", referencedColumnName="id"),
    inverseJoinColumns = @JoinColumn(name="companyId",  referencedColumnName="id"))
private List<Employee> employeeList;

现在,Hibernate将创建一个名为 table_name 的表,其中包含您想要的两列以及表 employee company 。 您也可以使用@ForeignKey注释指定freign键名称。