qu'est-ce que @JoinColumn et comment il est utilisé dans Hibernate
J'ai lu beaucoup de choses sur les annotations @JoinColumn mais je ne comprends toujours pas l'idée derrière tout cela.
Patient Table
CREATE TABLE patient (
patient_id BIGINT NOT NULL,
first_name VARCHAR(255) NOT NULL,
last_name VARCHAR(255) NOT NULL,
PRIMARY KEY(patient_id));
Véhicule Tableau
CREATE TABLE vehicles (
patient_id BIGINT NOT NULL,
vehicle_id BIGINT NOT NULL,
vehicle_manufacturer VARCHAR(255),
PRIMARY KEY (vehicle_id),
CONSTRAINT patienthasmanyvehicle FOREIGN KEY(patient_id) REFERENCES patient(patient_id));
Patient De Classe
@OneToMany(mappedBy = "patient")
private Collection<Vehicle> patientVehicles = new ArrayList<Vehicle>();
Catégorie De Véhicule
@ManyToOne
@JoinColumn(name="patient_id")
private Patient patient;
Je suis confus sur la façon dont le Véhicule de classe une partie, quelle est la relation entre
Vehicle Class ---- Entity
@JoinColumn(name="patient_id") ---- annotation
private Patient patient ----field
Dit-elle; Le Véhicule Entité a un Clé Étrangère à Patient entité nommé patient_id.
Ajouter le patient_id comme une colonne dans le Véhicule Entité tableau
Faire le paramètre nom de la JoinColumn devrait toujours être un Clé Étrangère ou de la Clé Primaire?
J'ai lu cela, mais je suis encore à la confusion.
JPA JoinColumn vs mappedBy
source d'informationauteur zbryan
Vous devez vous connecter pour publier un commentaire.
Une association par l'intermédiaire d'une table de jointure
Une unidirectionnel association via une clé étrangère
Une association bidirectionnelle via une clé étrangère
C'est le point de départ de l'utilisation de
@JoinColumn
.Pour vérifier que la clé étrangère(
patient_id
dans leVehicle
table) est vraiment mappé dans les patients de la table, vous pouvez utiliser@JoinColumn(nullable = false)
Classe De Véhicules ---- Entité
Les annotations @JoinColumn(name="patient_id") ---- annotation
privé Patiente ----champ
Code ci-dessus va générer une colonne patient_id (clé étrangère) dans une classe de Véhicules qui seront le point de Patients de la Classe de clé primaire.
MappedBy - Cet attribut nous dit que cette relation sera géré par catégorie de Véhicule. Exemple. Si l'on insère un véhicule, puis deux, SQL injection si cascadetype est tous/enregistrer. 1er SQL va injecter de détails dans la table Patient et 2ème SQL va injecter détails du véhicule en véhicule de table avec patient_id colonne de colonne de Véhicules pointant vers le Patient tuple inséré.
La colonne de jointure est déclarée avec les annotations @JoinColumn annotation qui ressemble à l'annotation @Column. Il a une plus de paramètres appelés referencedColumnName. Ce paramètre déclare la colonne dans l'entité visée qui sera utilisé pour la rejoindre.
Dans une relation bidirectionnelle, l'un des côtés (et un seul) doit être le propriétaire: le propriétaire est responsable de l'association de la colonne(s) de mise à jour. Pour déclarer un côté comme pas responsable de la relation, l'attribut mappedBy est utilisé. mappedBy désigne le nom de la propriété de l'association sur le propriétaire de côté.
Voici un Exemple de code :
Pourquoi est-ce que le
patient_id
(généré colonne qui est un FK) dans le Véhicule de la Table n'ont pas de valeur quand je lance mon code?Tous
@JoinColumn
n'est à spécifier une colonne pour rejoindre une entité association ou d'un élément de la collection. Puisque vous avez fait@JoinColumn
associés avec le Patient de la classe de l'objet, c'est pourquoi la clé étrangère est créée sur la table Patient.Pour plus d'informations, veuillez consulter https://docs.jboss.org/hibernate/jpa/2.1/api/javax/persistence/JoinColumn.html