Je suis nouveau dans Spring data jpa et j'essaie de comprendre le mappage @OneToOne. Disons que j'ai une entité Employé et une Entité Entreprise.Si je souhaite mapper ces 2 entités, je peux utiliser un mappage un à un sur l'entité Employé, ce qui signifie qu'un employé ne peut appartenir qu'à une seule entreprise. Cette compréhension est-elle erronée? Si un employé appartient à une entreprise (disons XYZ), alors l'entreprise (XYZ) ne peut pas être associée à un autre employé?
J'ai lu quelques articles mais je n'ai pas complètement compris.
5 Réponses :
Oui, vous avez raison.
Si vous voulez que l'entreprise ait plusieurs employés, vous voulez une relation ManyToOne entre l'employé et l'entreprise, et une relation OneToMany entre l'entreprise et l'employé.
En fait, dans ce cas, vous devez utiliser une relation un à plusieurs. vous pouvez simplement utiliser l'annotation @ManytoOne dans l'Entité de l'Entreprise liée à l'Entité des Employés.
Spécifie une association à valeur unique avec une autre classe d'entité qui a une multiplicité plusieurs-à-un. Il n'est normalement pas nécessaire de spécifier explicitement l'entité cible car elle peut généralement être déduite du type de l'objet référencé. Si la relation est bidirectionnelle, l'entité OneToMany non propriétaire doit utiliser l'élément mappedBy pour spécifier le champ de relation ou la propriété de l'entité propriétaire de la relation.
Visitez https://en.wikibooks.org/wiki/Java_Persistence/ManyToOne pour plus d'informations et d'échantillons.
@OneToOne représente qu'il n'y a qu'un seul objet d'entité lié à l'autre entité si nous avons un employé et une entité de passeport, donc un seul passeport lié à un employé et bien sûr un objet de l'employé lié à un objet du passeport
@Entity Public class Passport { @OneToOne private Employee employee; }
donc de l'employé je peux obtenir son passeport
@Entity Public class Employee { @OneToOne private Passport passport; }
et de Passeport que je peux obtenir The Employee.
Supposons qu'un employé puisse être mappé à une entreprise qui est un mappage individuel en gardant l'employé comme propriétaire de la relation. Alors que si vous considérez la société comme propriétaire de la relation, elle est un à plusieurs.
Case 1 : Employee as Owner @Entity Public class Employee { @ManyToOne private Company company; ...... } @Entity Public class Company { @OneToMany(mappedBy="company") \\ mappedBy is used to say that Employee is owner and \\it should match variable name company private List<Employee> employee; ...... }
Disons que l'employé ABC est mappé à une entreprise XYZ, alors l'employé DEF ne peut jamais être mappé à une entreprise XYZ comme ce @OneToOne Mapping?
Employé DEF, PQR, STG n'importe quel nombre d'employés peut également être mappé à la société XYZ.
Il doit être @ManyToOne dans la classe des employés. Je l'ai corrigé. Merci de l'avoir signalé.
J'ai compris votre point, mais ce que j'essaie de comprendre, c'est dans le cas de OneToOne, un employé XYZ est mappé à une entreprise ABC, puis l'employé DEF ne peut jamais être mappé à l'entreprise ABC car la société ABC a déjà été mappée à l'employé XYZ, je suis Je corrige?
Oui. Ce n'est correct que si vous mettez @OneToOne dans la classe d'entreprise pour l'employé.
Le mappage n'est rien d'autre que la définition de la relation entre deux entités / objets et c'est comme dire 5> 4, 10 = 10, 6 <8. Les nombres ici (5, 4, 10, 6 et 8) sont les entités et les symboles (>, = et <) sont les relations / mappage entre eux. Nous faisons de même avec les mappages en veille prolongée. Notez les deux entités et mettez entre elles la relation (mappez-les) de la manière la plus logique.
Father OneToMany Child (Le père peut être un, pour plusieurs enfant / enfants)
Père de l'enfant ManyToOne (l'enfant / les enfants peuvent être plusieurs, pour un père )
Employé Entreprise ManyToOne (L'employé peut être plusieurs, pour une entreprise )
Entreprise OneToMany Employés (l'entreprise peut être un ou plusieurs employés )
Adresse OneToOne Employee (L'adresse peut être One, To One Employee)
Adresse OneToOne de l’employé (l’employé peut être une adresse un, à un )
La relation doit avoir un sens. Ce qui signifie que cela devrait avoir du sens lorsque vous regardez la relation de chacun des deux côtés de la relation (un enfant, plusieurs pères n'a pas de sens, mais un père, plusieurs enfants / enfants le font)
Le one-to-one est bidirectionnel. L'entreprise / employé est un à plusieurs (tout le monde travaille pour une seule entreprise) ou plusieurs à plusieurs (certaines personnes ont un deuxième emploi).
Peut aider: en.wikipedia.org/wiki/One-to-one_ ( data_model)