Maison  >  Article  >  Java  >  Comment puis-je exploiter les annotations Hibernate et Spring pour établir et gérer des relations un-à-plusieurs, plusieurs-à-un et plusieurs-à-plusieurs entre entités ?

Comment puis-je exploiter les annotations Hibernate et Spring pour établir et gérer des relations un-à-plusieurs, plusieurs-à-un et plusieurs-à-plusieurs entre entités ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-02 22:00:30315parcourir

How can I leverage Hibernate and Spring annotations to establish and manage one-to-many, many-to-one, and many-to-many relationships between entities?

Utiliser des annotations pour créer des relations dans Hibernate et Spring

Relations un-à-plusieurs

  • Uni- directionnel : La classe propriétaire, Foo, maintient une liste de bars. Dans la base de données, Bars aura une clé étrangère vers Foo.

    <code class="java">@Entity
    public class Foo {
      @OneToMany
      private List<Bar> bars;
    }
    
    @Entity
    public class Bar {
      @ManyToOne
      @JoinColumn(name="fooId")
      private Foo foo;
    }</code>
  • Bidirectionnel : Foo et Bar maintiennent des références l'un à l'autre.

    <code class="java">@Entity
    public class Foo {
      @OneToMany(mappedBy="foo")
      private List<Bar> bars;
    }
    
    @Entity
    public class Bar {
      @ManyToOne
      @JoinColumn(name="fooId")
      private Foo foo;
    }</code>

Relations plusieurs-à-un

  • Unidirectionnelles : La classe propriétaire, Bar, a une référence à Foo . Dans la base de données, Foo aura une clé étrangère vers Bar.

    <code class="java">@Entity
    public class Bar {
      @ManyToOne
      @JoinColumn(name="fooId")
      private Foo foo;
    }
    
    @Entity
    public class Foo {
      // No corresponding mapping to Bar
    }</code>
  • Bidirectionnel : Foo et Bar maintiennent des références l'un à l'autre.

    <code class="java">@Entity
    public class Bar {
      @ManyToOne
      @JoinColumn(name="fooId")
      private Foo foo;
    }
    
    @Entity
    public class Foo {
      @OneToMany(mappedBy="foo")
      private List<Bar> bars;
    }</code>

Relations plusieurs-à-plusieurs

  • Utilisation d'une table de pont : Crée une table de jointure pour stocker les relations.

    <code class="java">@Entity
    public class Foo {
      @ManyToMany
      @JoinTable(name="FOO_BAR",
          joinColumns = @JoinColumn(name="fooId"),
          inverseJoinColumns = @JoinColumn(name="barId"))
      private List<Bar> bars;
    }
    
    @Entity
    public class Bar {
      @ManyToMany
      @JoinTable(name="FOO_BAR",
          joinColumns = @JoinColumn(name="barId"),
          inverseJoinColumns = @JoinColumn(name="fooId"))
      private List<Foo> foos;
    }</code>

Options de configuration

  • orphanRemoval : Lorsque la valeur est vraie, les entités orphelines (celles non référencées par aucun parent) seront supprimées sur flush.
  • fetchType : Contrôle le type de stratégie de récupération utilisée pour le chargement paresseux des collections.
  • cascade : Spécifie les opérations qui sont en cascade depuis parent aux entités enfants.

Dépannage

  • LazyInitializationException : se produit lors de la tentative d'accès à une collection chargée paresseusement sans l'initialiser au préalable.
  • Problèmes de performances : la surutilisation de Eager Fetching peut dégrader les performances.
  • orphanRemoval : à utiliser avec parcimonie pour éviter les suppressions inutiles de bases de données.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn