Maison  >  Article  >  Java  >  Comment définir des relations dans Hibernate et Spring à l’aide d’annotations ?

Comment définir des relations dans Hibernate et Spring à l’aide d’annotations ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-03 09:10:03731parcourir

How Can You Define Relationships in Hibernate and Spring Using Annotations?

Utiliser des annotations pour définir des relations dans Hibernate 4 et Spring

Relations unidirectionnelles et bidirectionnelles

Relations un à un

Unidirectionnel :

<code class="java">class Foo {
    private Bar bar;
}

class Bar {
}</code>

Bidirectionnel (géré par la classe Foo) :

<code class="java">class Foo {
    @OneToOne(cascade = CascadeType.ALL)
    private Bar bar;
}

class Bar {
    @OneToOne(mappedBy = "bar")
    private Foo foo;
}</code>

One- Relations à plusieurs

Unidirectionnelles à l'aide d'une table de jointure gérée par l'utilisateur :

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

class Bar {
    // No corresponding mapping to Foo.class
}

@Entity
@Table(name = "FOO_BAR")
class FooBar {
    private UUID fooBarId;
    private Foo foo;
    private Bar bar;
}</code>

Bidirectionnelles à l'aide du mappage de clés étrangères :

<code class="java">class Foo {
    @OneToMany(mappedBy = "bar")
    private List<Bar> bars;
}

class Bar {
    @ManyToOne
    @JoinColumn(name = "fooId")
    private Foo foo;
}</code>

Relations plusieurs-à-plusieurs

Bidirectionnelles à l'aide de la table de jointure gérée par Hibernate :

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

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

Bidirectionnelles à l'aide Table de jointure gérée par l'utilisateur :

<code class="java">class Foo {
    @OneToMany(mappedBy = "bar")
    private List<FooBar> bars;
}

class Bar {
    @OneToMany(mappedBy = "foo")
    private List<FooBar> foos;
}

@Entity
@Table(name = "FOO_BAR")
class FooBar {
    private UUID fooBarId;
    private Foo foo;
    private Bar bar;
}</code>

Détermination de la propriété de la relation

  • Généralement, l'objet avec la collection est propriétaire de la relation.

Choisir FetchType

  • Par défaut : LAZY
  • Utilisez EAGER pour les collections souvent utilisées.
  • Envisagez d'utiliser Hibernate.initialize() ou FetchMode.SUBSELECT pour les collections chargées paresseusement nécessaires dans une méthode spécifique.

Détermination de la direction de la cascade

  • Les opérations en cascade ne vont que dans une seule direction, sauf indication contraire.
  • Marquez l'annotation @OneToMany pour la cascade dans le côté propriétaire de la relation.

Suppression des orphelins

  • OrphanRemoval = true : supprime les objets orphelins qui ne sont plus référencés dans aucune autre relation.

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