Hibernate - реализация составного ключа с дополнительными столбцами - PullRequest
0 голосов
/ 05 января 2019

Допустим, мы работаем над архивом для какой-то организации. В части нашей базы данных мы будем хранить историю позиций участников, которая выглядит следующим образом

enter image description here

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...