comment faire une clé primaire composite (java persistance d'annotation)
Comment faire en sorte que la table user_roles définit les deux colonnes (nom d'utilisateur, roleID) en tant que clé primaire composite. devrait être facile, ne m'en souviens pas/trouver.
Dans user
entité:
@ManyToMany(fetch = FetchType.LAZY)
@JoinTable(name = "user_roles")
public List<RoleDAO> getRoles() {
return roles;
}
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
public Integer getUserID() {
return userID;
}
Dans roles
entité:
@ManyToMany(fetch = FetchType.LAZY)
@JoinTable(name = "user_roles")
public List<UserDAO> getUsers() {
return users;
}
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
public Integer getRoleID() {
return roleID;
}
Merci.
** PLUS D'INFOS
Donc il y a une troisième table user_roles
(généré automatiquement par ci-dessus) qui prend userID
de user
entité et roleID
de roles
entité. Maintenant j'ai besoin de ces deux colonnes dans la table générée (user_roles
) pour être une clé primaire composite.
Vous devez vous connecter pour publier un commentaire.
Vous avez déjà eu un peu de bonnes réponses sur la façon de faire exactement ce que vous demandez..
De référence permettez-moi juste de parler de la manière recommandée pour ce faire, en mode veille prolongée au lieu de cela, qui consiste à utiliser une clé de substitution comme clé primaire, et pour marquer les clés d'entreprise comme NaturalId de l':
Dans le code, à l'aide d'annotations, cela ressemblerait à quelque chose comme ceci:
À l'aide cela va vous faire économiser beaucoup de maux de tête en bas de la route, ce que vous découvrirez quand vous avez fréquemment référence /carte le composé de la clé primaire.
J'ai trouvé cela à la dure, et à la fin, simplement abandonné la lutte contre Hibernate et a plutôt décidé d'aller avec le courant. Je comprends que cela puisse ne pas être possible dans votre cas, comme vous l'avez peut-être affaire avec le logiciel de legs ou de dépendances, mais je voulais juste parler pour référence future. (si vous ne pouvez pas l'utiliser peut-être quelqu'un d'autre peut!)
Afin de répondre à votre exigence, vous pouvez mapper vos @ManyToMany comme @OneToMany de cartographie.
De cette façon, USER_ROLE contient les deux USER_ID et ROLE_ID composé de clé primaire
Je vais vous montrer comment:
rappelez-vous
Nous avons donc créé une JoinedUserRoleId constructeur comme celui-ci, afin de prendre soin d'elle
Et enfin le Rôle de la classe
Selon le test, nous allons écrire le code suivant
Avis selon le code ci-dessus AUCUNE RÉFÉRENCE à JoinedUserRole classe.
Si vous souhaitez récupérer un JoinedUserRole, essayez les solutions suivantes
ce qui concerne,
Clés composites sont réalisées à l'aide de @IdClass (l'autre façon est d'utiliser @EmbeddedId et @Embeddable pas sûr que l'on vous êtes à la recherche pour le @IdClass est comme suit
ma Catégorie ici sera votre user_roles et le nom et createDate sera votre nom d'utilisateur et roleid
Merci à vous pour améliorer votre question ... et en tenant compte des suggestions.
(Désolé, C'est un peu étrange que vous postfix votre entités avec Daos, mais ce n'est pas le point.)
Je ne suis pas sûr qu'il y est tout le problème de la gauche :
J'ai eu le même Problème avec les clés primaires.
Je savais aussi la solution avec le @Embeddable et @EmbeddedId Classe. Mais je voulais juste la solution la plus simple avec les annotations.
Bien j'ai trouvé l'illumination par le biais de cet article:
http://www.vaannila.com/hibernate/hibernate-example/hibernate-mapping-many-to-many-using-annotations-1.html
et ici, c'est la magie:
cela génère une clé primaire sur la table de jointure:
ce dosn pas générer une clé primaire sur la table de jointure:
au moins dans mon environnement
Remarque que la différence est à l'aide de Ensemble ou Liste