У меня есть следующий сценарий: Есть компании и сотрудники. У каждой компании есть набор сотрудников. Каждый сотрудник может работать для нескольких компаний. Таким образом, я осуществил следующие соотношения:Hibernate два родителя один ребенок картографирование
Company.class:
@JoinTable(name = "company_employee", joinColumns = @JoinColumn(name = "company_id") , inverseJoinColumns = @JoinColumn(name = "employee_id"))
@ManyToMany(fetch = FetchType.LAZY)
private List<Employee> employees;
Employee.class:
@JoinTable(name = "company_employee", joinColumns = @JoinColumn(name = "employee_id") , inverseJoinColumns = @JoinColumn(name = "company_id"))
@ManyToMany(fetch = FetchType.LAZY)
private List<Company> companies;
Очевидно, что работать для нескольких компаний, каждый сотрудник должен иметь несколько не перекрывающихся графиков, присвоенные каждой компании он или она работает. Кроме того, должен быть список расписаний для каждой комбинации Company-Employee, поскольку по истечении срока действия старого расписания, и новый график становится эффективным. Так я и есть Schedule.class
, который, как предполагается, имеют child to parent @ManyToOne
отношения как к Company
и Employee
, и должен работать следующим образом: каждый Schedule
, и, таким образом, List<Schedule>
должны соответствовать точно одной комбинации Company
и Employee
экземпляров. Как реализовать эти отношения?
Update 1
Я только имею в виду добавление @OneToMany Schedule
отношения к каждому Company
и Employee
, но мне нужно поставить экземпляры Schedule
как в Company
и Employee
каждый раз, и таким образом, просто не посмотрите правильно, и теперь мне не очевидно, как вернуть его обратно. Так что любая помощь будет оценена.
Этот пост был обновлен, чтобы показать сценарий реальной жизни у меня есть, а не только родовые названия Entity1, entity2, Entity3 для классов.
Update 2
Я принял ответ, но я не могу использовать его, если график содержит списки. Согласно моему плану, Schedule
должен содержать List<Vacation>
, чтобы узнать набор Vacations
в течение года и List
из Days
, каждый из которых показывает начало конкретного дня недели, перерыва и конца этого дня. Эти Days
также уникальны для каждого экземпляра Schedule
.
Предполагалось, что это что-то вроде ниже, но, очевидно, теперь у меня нет schedule_id
, поэтому как соединить эти списки с Schedule
?
@OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL, orphanRemoval = true)
@JoinColumn(name = "schedule_id")
private List<Vacation> vacations;
@JoinTable(name = "schedule_week", joinColumns = @JoinColumn(name = "schedule_id") , inverseJoinColumns = @JoinColumn(name = "day_id"))
@OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL, orphanRemoval = true)
private List<Day> week;
Как включить эти списки?
Было бы лучше, если бы вы добавили реальный сценарий. Решение не может быть связано с спящим режимом, но изменение дизайна. –
@tharindu_DG Я отредактировал свое сообщение, чтобы показать реальный сценарий. Возможно, вы правы, надейтесь, что это сделает вещи более ясными. –