Un à de nombreuses association de Rejoindre les tables avec des colonnes de clé primaire dans la JPA
Je suis en train de travailler sur le système d'héritage, besoin de lire certaines des informations de la base de données. Ci-dessous sont la relation de table
Vendeur (vendorId - pk, vendorEid, nom)
VendorContactBridge (bridgeId -pk, vendorEid, contactEid)
Contact (contactId -pk, contactEid, téléphone)
vendorEid et contactEid ne sont pas la clé primaire de la table, mais utilisée comme colonne de jointure dans la table de Jointure VendorContactBridge.
Fournisseur De L'Entité
@Entity
@Table(name="Vendor")
public class Vendor implements Serializable{
@Id
@Column(name="VENDORID")
private BigDecimal vendorId;
@Column(name="VENDOREID")
private BigDecimal vendorEid;
@OneToMany(fetch = FetchType.EAGER)
@JoinTable(name="VENDORCONTACTBRIDGE",
joinColumns={@JoinColumn(name="VENDOREID", referencedColumnName="VENDOREID")},
inverseJoinColumns={@JoinColumn(name="CONTACTEID", referencedColumnName="CONTACTEID")})
private Set<Contact> vendorContact;
}
Contact De L'Entité -
@Entity
@Table(name="CONTACT")
public class Contact implements Serializable{
@Id
@Column(name="CONTACTID")
private BigDecimal contactId;
@Column(name="CONTATEID")
private BigDecimal contactEId;
@ManyToOne
@JoinTable(name="VENDORCONTACTBRIDGE",
joinColumns={@JoinColumn(name="CONTACTEID", referencedColumnName="CONTATEID")},
inverseJoinColumns={@JoinColumn(name="VENDOREID", referencedColumnName="VENDOREID")})
private Vendor vendor;
}
lors de l'exécution de la requête, obtenir ci-dessous exception
SecondaryTable JoinColumn ne peut pas faire référence à un non de la clé primaire.
J'ai enlevé l'envie d'extraction qui j'ai donné dans le Fournisseur d'entité, je n'obtiens pas d'exception, mais il ne charge pas la collection. Quel est le problème avec de l'association ?
OriginalL'auteur Pankaj | 2012-12-14
Vous devez vous connecter pour publier un commentaire.
Selon la JPA 2.0 spécifications paragraphe 11.1.21 JoinColumn annotaion à la page 379
Il semble Hibernate choisir de ne pas mettre en œuvre cette partie facultative. D'autres implémentations peuvent. Je l'ai essayé sur EclipseLink, mais que l'un ne fonctionne pas non plus (il l'échec de la validation).
Je vois deux solutions. L'un est d'ajuster votre schéma à utiliser les clés primaires qui serait la bonne chose à partir d'une conception de la base de la théorie de la perspective. Cependant, il pourrait ne pas être une option, car d'autres logiciels selon ce schéma qui laisse la deuxième option. Le contourner par PAS moddeling la relation en JPA suffit d'utiliser l'eid et de récupérer les objets pertinents de vous-même.
Que serait le principe de base. Mais il serait préférable d'utiliser une requête native que vous seriez en mesure de faire une jointure et donc utiliser une seule requête sql pour récupérer les objets.
OriginalL'auteur Eelke
J'ai trouvé une solution de contournement pour ce problème.
Voir ici:
OriginalL'auteur L.Butz