J'ai deux entités: projet, employésnombreux à plusieurs une cartographie façon et utiliser seulement deux tables
- employé a clé primaire {employeeId} + d'autres attributs du projet
- a clé primaire {projectId }
code:
public class Employee {
Long employeeId;
String name;
}
public class Project {
Long projectId;
Collection<Employee> employees;
}
employé et le projet est une façon beaucoup à plusieurs. L'approche générale consiste à avoir trois tables: Employee, Project, EmployeesAssignedToProjects.
Employee
----------
employeeId (PK)
name
Project
----------
projectId (PK)
EmployeesAssignedToProjects
----------------------------
projectId (FK)
employeeId (FK)
{projectId,employeeId} (PK)
Étant donné que Project n'a pas d'autres attributs que son ID, la table de projet n'est pas vraiment nécessaire. Cela amène à la question de savoir comment cette relation many-to-many doit être mappée maintenant que Project est essentiellement mappé à EmployeesAssignedToProjects.
Notez que Employee n'a pas de pointeur vers Project. La construction mappedBy typique ne peut pas être utilisée ici.
[- Mise à jour -]
Le problème est un peu plus compliqué: deux projets et les employés ont des clés composites.
- clé du projet est {COMPANYID, projectId} clé de
- employé est {COMPANYID, employeeId}
I a adopté les 3 tableaux mis en place. La table PROJECT_EMPLOYEE a trois colonnes: companyId, employeeId, projectId. Et je cartographiées dans 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>
J'ai reçu une erreur se plaignant COMPANYID apparaissant plusieurs fois: colonne répétée dans la cartographie pour la collecte: colonne Project.employees: COMPANYID
Merci Pascal, s'il vous plaît voir la [Mise à jour]. –
@Candy De rien. Mais s'il vous plaît, postez la * nouvelle * question comme une nouvelle question. Liez-le à celui-ci si vous le souhaitez, mais votre mise à jour est une question et un problème différents, même s'ils sont liés. S'il vous plaît, ne mélangez pas les problèmes en une seule question. Je ne répondrai pas ici. –
Est-il possible de mapper @JoinColumn (nom = "EMPLOYEE_EMPLOYEEID") à une autre clé unique de la table Employe? Je ne peux pas faire cela. Je voudrais qu'une contrainte chaîne unique apparaisse au lieu d'entiers – momomo