我有三张桌子,展示了我非常简单的项目。
CREATE TABLE company (
id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(250) NOT NULL
);
CREATE TABLE employee (
id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(250) NOT NULL
);
CREATE TABLE company_employee (
company_id INT NOT NULL,
employee_id INT NOT NULL,
hire_date DATE DEFAULT NULL,
resign_date DATE DEFAULT NULL,
FOREIGN KEY (company_id) REFERENCES company (id),
FOREIGN KEY (employee_id) REFERENCES employee (id)
);
我有Java表示
@Entity
@Table(name = "employee")
public class Employee implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
Integer id;
@Column(name = "name")
String name;
@ManyToMany(mappedBy = "employees")
private List<Company> companies;
@Entity
@Table(name = "company")
public class Company implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer id;
@Column(name = "name")
private String name;
@ManyToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
@JoinTable(name = "company_employee",
joinColumns = {@JoinColumn(name = "company_id")},
inverseJoinColumns = {@JoinColumn(name = "employee_id")})
private Collection<Employee> employees;
我无法弄清楚我可以存储历史数据的位置。在历史数据中,我需要存储hire_date,resign_date of emplyee以及存储每个emplyee的所有公司。所以我的问题是,我可以管理这样的中介,以及存储所有历史信息的最佳方式是什么?
答案 0 :(得分:1)
这是与属性的多对多关系。我相信你将能够通过一个基本的例子来理解谁来处理它:
http://www.mkyong.com/hibernate/hibernate-many-to-many-example-join-table-extra-column-annotation/
答案 1 :(得分:0)
您已经有一个交叉表&#34; company_employee&#34;。
您可以在此处存储employee1 1.1.2013至31.12.2013 @ company1。另一次是1.1.2014 ... 31.12.2014 @ company2。
您必须通过hire_date desc订购。根据定义,列表中的第一个值是当前或最后一个就业,所有其他值都是历史记录。
这不是存储位置的问题,而是如何读取数据。