Maison > Java > javaDidacticiel > 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
Libérer: 2024-11-03 09:10:03
original
792 Les gens l'ont consulté

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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal