Я не могу описать свою проблему, я пытаюсь повторить ее на примере:
У меня есть две сущности (таблицы): Отдел и Человек .Обе таблицы имеют поле CODE , которое не уникально .
Как мне определить manyToMany двунаправленные отношения между этими таблицами?
- У отправителя есть коллекция Persons, которая возвращает все сущности с Person.CODE eq Department.CODE
- Партнер имеет коллекцию Department, которая возвращает все сущности с Department.CODE eq Partner.CODE
Мне нужно определение отношения - без запроса sql или hpql.
--------- Оригинальный вопрос -------
Мне нужносоздать гибернацию отношения один ко многим между отделом и человеком (в одном отделе много людей).Отдел и лица имеют срок действия (validFrom, validTill)
class Department {
Long id;
String code;
String name;
Date validFrom;
Date validTill;
@OneToMany(fetch = FetchType.LAZY, mappedBy = "departmentId")
@OnDelete(action = OnDeleteAction.CASCADE)
private Set<Person> persons = new HashSet<Person>();
}
class Person {
Long id;
String name;
String surname;
Date validFrom;
Date validTill;
}
Без ORM (гибернация) легко выбрать лиц конкретного отдела науказанная дата:
select P.* from Person P, Deparment d
where d.code = ? and
p.department_id = d.department_id and
? between d.validFrom and d.validTill and
? between p.validFrom and p.validTill
В отношении должен использоваться неуникальный ключ (КОД) вместо идентификатора отдела.
Возможно ли сделать что-то подобное с Hibernate?
Мне не нужны отдельные объекты и составлять запросы самостоятельно.
Я хочу использовать все функции, которые предлагает ORM (отложенная загрузка, сохранение в каскаде ...)