Mysql
 sql >> Base de données >  >> RDS >> Mysql

JPA persiste beaucoup à beaucoup

Ok tout d'abord merci à Mikko de m'avoir guidé vers la réponse. Je voulais juste poster une réponse qui pourrait être directement utile à toute autre personne qui pourrait être dans la position dans laquelle j'étais. De plus, cela est basé sur un moment Eureka, donc ce n'est peut-être pas techniquement correct, mais c'est ainsi que je le vois.

Le gros problème auquel je suis confronté était que dans MySQL, je pouvais voir la table de pontage comme une table individuelle ! (désolé je ne peux pas poster une image de mon diagramme EER mais je ne semble pas avoir assez de privilèges pour le moment) J'ai donc supposé que Java verrait aussi la table de pontage comme une table ! Eh bien, ce n'est pas le cas. Cette table de pont n'existe pas vraiment en Java en tant que table conventionnelle, elle est en fait représentée par le type de collection de tables opposées que vous lui associez.

La façon la plus simple de le voir pour moi était d'oublier complètement la table de pontage et de se concentrer sur les deux "vraies" tables et d'y associer les données. Le code suivant n'est PAS la meilleure pratique car je définis simplement le role_id mais c'est bien juste pour montrer mon point.

List<Roles> userRoleList = new ArrayList<Roles>();

Users currentUser = new Users();
currentUser.setUserId(userId);
currentUser.setUsername(email);
currentUser.setPassword(password);

Roles userRole = new Roles();
userRole.setRoleId("2");

userRoleList.add(userRole);
currentUser.setRolesCollection(userRoleList);

getUsersFacade().create(currentUser);

J'espère que cela aidera quelqu'un d'autre aux prises avec des relations multiples.

(NB. J'ai modifié le code de la question d'origine pour utiliser une liste au lieu d'une collection pour plus de facilité, mais vous pouvez tout aussi bien utiliser tout autre type qui correspond à vos besoins.)