Допустим, мы работаем над архивом для какой-то организации. В части нашей базы данных мы будем хранить историю позиций участников, которая выглядит следующим образом
Один из способов сделать это в 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 и не понимаю, как именно работают аннотации. Вопрос в том, в чем разница между двумя вариантами, и какой мне следует использовать?