Java 如何存储单个实体而不是集合?
我需要创建一个实体来存储我的员工的历史记录。这是我的桌子 创建表employee\u history id INT NOT NULL主键自动递增, 员工id INT, 公司id INT, 雇用日期默认为空, 辞职日期默认为空, 外键员工id引用员工id, 外键公司id引用公司id ; 问题是我只需要存储一个实体EmployeeHistory,而不是集合。有没有办法解决这个问题 UPD: 员工Mike的结果:Java 如何存储单个实体而不是集合?,java,hibernate,Java,Hibernate,我需要创建一个实体来存储我的员工的历史记录。这是我的桌子 创建表employee\u history id INT NOT NULL主键自动递增, 员工id INT, 公司id INT, 雇用日期默认为空, 辞职日期默认为空, 外键员工id引用员工id, 外键公司id引用公司id ; 问题是我只需要存储一个实体EmployeeHistory,而不是集合。有没有办法解决这个问题 UPD: 员工Mike的结果: 1, Mike, GridDynamics, 2000-08-10, 2003-0
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:
我的公司实体类
@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的表和另一个名为EMPLOYEE\u HISTORY的表 现在要存储员工历史记录,假设一个员工有5条记录 您可以在EMPLOYEE中创建包含员工详细信息的条目
您可以在EMPLOYEE_HISTORY中包含FK_EMPLOYEE,它会将历史记录表中的所有记录映射到EMPLOYEE表中唯一的EMPLOYEE条目,因此您可以将所有5条历史记录都关联到一名员工。OneToOne映射有什么问题?因此,您似乎需要在EmployeeHistory中对员工和公司进行一对一映射。问题到底是什么?问题是存储员工历史记录,并在其中收集记录。我需要组装由连接组成的复杂对象。你能提供你的实体类吗?在员工和公司之间使用@OneToOne映射完全符合您的要求。根据你的回答,问题出在其他地方。是的,当然。我更新了问题。因此,您需要创建另一个名为employee_history的表,并创建所有历史事务。确保这些条目与您在employee表中执行的employee条目相关联。只有一个实体不足以存储这样的关系数据。所以迭代集合并执行历史记录表中的所有条目。那么问题是什么呢?我只需要一个实体,不需要集合。这就是问题的本质。从您编辑的代码中,我可以看出没有唯一的标识符,您可以使用它将历史记录与员工关联,必须有一个像idlet us这样的标识符
@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;