如何存储单个实体而不是集合?

时间:2014-04-22 11:04:56

标签: java hibernate

我需要创建一个应该存储员工历史的实体。这是我的表

CREATE TABLE employee_history (
    id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
    employee_id INT,
    company_id INT,
    hire_date DATE DEFAULT NULL,
    resign_date DATE DEFAULT NULL,
    FOREIGN KEY (employee_id) REFERENCES employee (id),
    FOREIGN KEY (company_id) REFERENCES company (id)
);

问题是我只需要存储一个实体EmployeeHistory,而不是Collection<EmployeeHistory>。任何想法如何解决这个问题?

UPD:

员工Mike的结果:

1, Mike,  GridDynamics,  2000-08-10,  2003-01-01
2, Mike,  IBM,           2012-04-03,  2014-02-15
3, Mike,  GridDynamics,  1997-04-17,  1998-03-08

UPD2:

我的Company实体类

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

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Integer id;

    @Column
    private String name;

    @JoinColumn(name = "company_id")
    @OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
    @JsonInclude(JsonInclude.Include.NON_NULL)
    @JsonProperty("employees")
    private List<Employee> employees;

Employee

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

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @JsonProperty("id")
    Integer id;

    @Column
    @JsonProperty("name")
    String name;

    @ManyToOne
    @JoinColumn(name = "company_id", nullable = true)
    @JsonInclude(JsonInclude.Include.NON_NULL)
    @JsonProperty("company")
    private Company company;

1 个答案:

答案 0 :(得分:0)

考虑到您有许多与员工相关的历史记录。

您可以创建一个名为EMPLOYEE的表和另一个名为EMPLOYEE_HISTORY

的表

现在存储员工历史记录,假设一名员工有5条记录。

您可以在EMPLOYEE中创建包含员工详细信息的条目

您可以在FK_EMPLOYEE中拥有EMPLOYEE_HISTORY,这会将历史记录表中的所有记录映射到EMPLOYEE表中的唯一员工条目,因此您可以拥有与员工关联的所有5条历史记录。