@OneToMany sans relation inverse et sans une table de jointure?
C'est un problème similaire à "Hibernate @OneToMany sans une table de jointure", que j'ai besoin d'un @OneToMany relation sans une table de jointure. Cependant, je voudrais aussi de ne pas définir la relation inverse. Retrait de l'inverse semble entraîner une table de jointure étant généré automatiquement... est-il une solution pour cela?
Vous devez vous connecter pour publier un commentaire.
En JPA 2.0+ vous pouvez utiliser les annotations @JoinColumn comme un moyen d'éviter de générer de la table jointe.
Essayer.
Mise à JOUR
Les infos fournies ci-dessus a été extrait à partir des EJB 3.0 o'reilly livre (voir Les annotations @JoinColumn annotation des références de la CUSTOMER_ID colonne dans la table de TÉLÉPHONE). Cependant, plaine JPA 1.0 de la spécification ne prend pas en charge cette fonctionnalité. Ce qu'il dit est
Donc en 1.0, il est un fournisseur spécifique de mise en œuvre (Et c'est logique, L'auteur travaille à JBoss - Le chapeau rouge de la division derrière la mise en veille prolongée)
Mais il est pris en charge par JPA 2.0 mise en œuvre
La JPA 1.0 de la spécification ne PAS soutien unidirectionnel OneToMany cartographie sans une Table de Jointure.
Et à l'aide d'un
JoinColumn
sur unOneToMany
n'est pas autorisé dans standard JPA 1.0 (uniquement sur unOneToOne
,ManyToOne
ouManyToMany
). Il est en JPA 2.0 si.De la JPA 1.0 spécification:
Pour résumer, si vous ne voulez pas une Table de Jointure (et complet en lecture/écriture) et veulent toujours être JPA conforme, faire de l'association bidirectionnelle (avec un
inverse
côté).Le wiki livre lien ci-dessous explique un truc (cartographie de la table cible comme la table de jointure) pour "contourner" le problème, mais cela ne fonctionne que pour les lectures, les écritures ne fonctionne pas.
Références
Si il n'y a pas de table de jointure dans la base de données, la relation entre les deux tables dans la base de données qui serait obtenu par la clé étrangère qui fait référence à la clé primaire.
Si la relation est par le biais de PK/FK, il y a une propriété dans la classe cible qui renvoie à la source, de sorte que le FK colonne est remplie avec une valeur. Cette propriété dans la classe cible pourrait être un id ou un objet source.
Si c'est un objet source, alors vous devez avoir un inverse @ManyToOne dans la classe cible.