У меня есть две сущности: проект, сотрудник
- У сотрудника есть первичный ключ {employeeId} + некоторые другие атрибуты
- У проекта есть первичный ключ {projectId}
Код:
public class Employee {
Long employeeId;
String name;
}
public class Project {
Long projectId;
Collection<Employee> employees;
}
Сотрудник и проект - это односторонние отношения «многие ко многим». Общий подход состоит в том, чтобы иметь три таблицы: Employee, Project, EmployeesAssignedToProjects.
Employee
----------
employeeId (PK)
name
Project
----------
projectId (PK)
EmployeesAssignedToProjects
----------------------------
projectId (FK)
employeeId (FK)
{projectId,employeeId} (PK)
Поскольку у Project нет других атрибутов, кроме идентификатора, таблица Project в действительности не нужна. Это поднимает вопрос о том, как теперь сопоставить это отношение «многие ко многим», когда Project по существу сопоставляется с EmployeesAssignedToProjects.
Обратите внимание, что у Employee нет указателя на Project. Типичная конструкция mappedBy здесь не может использоваться.
[-- Обновлять --]
Проблема немного сложнее: и Project, и Employee имеют составные ключи.
- Ключ проекта: {companyId, projectId}.
- Ключ сотрудника: {companyId, employeeId}
Я установил 3 стола. Таблица PROJECT_EMPLOYEE имеет 3 столбца: companyId, employeeId, projectId. И я сопоставил в xml:
<many-to-many name="PROJECT" >
<join-table name="PROJECT_EMPLOYEE">
<join-column name="companyId" referenced-column-name="companyId"/>
<join-column name="employeeId" referenced-column-name="employeeId" />
<inverse-join-column name="companyId" referenced-column-name="companyId" />
<inverse-join-column name="projectId" referenced-column-name="projectId" />
</join-table>
</many-to-many>
Я получил сообщение об ошибке с жалобой на то, что идентификатор компании появляется несколько раз: Повторяющийся столбец в сопоставлении для коллекции: Столбец Project.employees: companyId