1
votes

Qu'est-ce que le mappage @OneToOne dans Spring JPA?

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.


2 commentaires

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)


5 Réponses :


0
votes

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é.


0 commentaires

0
votes

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.


0 commentaires

1
votes

@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.


0 commentaires

0
votes

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;
  ......
}


5 commentaires

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é.



0
votes

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)


0 commentaires