比方说,我们正在为某个组织制作档案。在数据库的一部分中,我们将存储如下所示的会员职位历史记录
在Hibernate中执行此操作的一种方法是:
@Embeddable
public class CompositeKey implements Serializable {
@ManyToOne
private Employee employee;
@ManyToOne
private Position position;
//the rest of the class
}
@Entity
@Table(name="EmployeePositions")
@AssociationsOverride({
@AssiciationOverride(name="key.employee",
joinColumns = @JoinColumn(name = "Employees_employee_id")),
@AssiciationOverride(name="key.position",
joinColumns= @JoinColumn(name="Positions_position_id"))
})
public class EmployeePosition implements Serializable {
@EmbeddedId
private CompositeKey key;
@Id
@Column(name="begin_date")
private Date begin_date;
@Column(name="end_date")
private Date end_date;
//the rest of the class
}
//Employee and Position classes
另一个变体是
@Embeddable
public class CompositeKey implements Serializable {
@Column(name="Employees_employee_id")
private int employee_id;
@Column(name="Positions_position_id")
private int position_id;
//the rest of the class
}
@Entity
@Table(name="EmployeePositions")
public class EmployeePosition {
@EmbeddedId
private CompositeKey key;
@ManyToOne
@JoinColumn(name="Employees_employee_id", referencedColumnName="employee_id")
private Employee employee;
@ManyToOne
@JoinColumn(name="Positions_position_id", referencedColumnName="position_id")
private Position position;
@Id
@Column(name="begin_date")
private Date begin_date;
@Column(name="end_date")
private Date end_date;
//the rest of the class
}
//Employee and Position classes
这两个示例在我的情况下均有效,并且给出的结果完全相同。我是Hibernate的新手,不完全了解注释的工作原理。问题是,这两种变体之间有什么区别,我应该使用哪一种?