Maison > Java > javaDidacticiel > Comment définir les relations entre les entités dans Hibernate 4 et Spring à l'aide d'annotations ?

Comment définir les relations entre les entités dans Hibernate 4 et Spring à l'aide d'annotations ?

Susan Sarandon
Libérer: 2024-11-03 13:30:30
original
500 Les gens l'ont consulté

How do you define relationships between entities in Hibernate 4 and Spring using annotations?

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

Relation unidirectionnelle un à un

Pour créer une relation unidirectionnelle -à-un, utilisez l'annotation @OneToOne sur la classe propriétaire. Configurez l'annotation @JoinColumn pour spécifier le nom de la colonne qui contiendra la clé étrangère dans la table de la classe dépendante.

Exemple :

<code class="java">public class Foo {
    private Long fooId;

    @OneToOne
    private Bar bar;
}

public class Bar {
    private Long barId;
    // No corresponding mapping to Foo.class
}</code>
Copier après la connexion

Bi-directionnel One-to- Une relation

Pour une relation bidirectionnelle un-à-un, annotez les deux classes avec @OneToOne. Utilisez l'annotation @JoinColumn sur la classe propriétaire pour spécifier le nom de la colonne de clé étrangère. Sur la classe dépendante, utilisez l'annotation @JoinColumn pour mapper la clé étrangère à la classe propriétaire.

Exemple :

<code class="java">public class Foo {
    private Long fooId;

    @OneToOne(cascade = CascadeType.ALL)
    @JoinColumn(name = "barId")
    private Bar bar;
}

public class Bar {
    private Long barId;

    @OneToOne(mappedBy = "bar")
    private Foo foo;
}</code>
Copier après la connexion

Relation un-à-plusieurs unidirectionnelle avec l'utilisateur- Table de jointure gérée

Pour une relation un-à-plusieurs unidirectionnelle à l'aide d'une table de jointure gérée par l'utilisateur, créez une classe de table de jointure qui mappe les relation entre les deux classes. Annotez la table de jointure avec @Entity et @Table et mappez les colonnes aux clés primaires des classes parent et enfant.

Exemple :

<code class="java">public class Foo {
    private Long fooId;

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

public class Bar {
    private Long barId;

    // No mapping specified here.
}

@Entity
@Table(name="FOO_BAR")
public class FooBar {
    private UUID fooBarId;

    @ManyToOne
    @JoinColumn(name = "fooId")
    private Foo foo;

    @ManyToOne
    @JoinColumn(name = "barId")
    private Bar bar;

    // You can store other objects/fields on this table here.
}</code>
Copier après la connexion

Bidirectionnel un-à-plusieurs Relation utilisant le mappage de clés étrangères

Pour une relation bidirectionnelle un-à-plusieurs utilisant le mappage de clés étrangères, annotez la classe propriétaire avec @OneToMany et la classe dépendante avec @ManyToOne. Utilisez l'annotation @JoinColumn pour spécifier le nom de colonne qui contiendra la clé étrangère dans la table de classe dépendante.

Exemple :

<code class="java">public class Foo {
    private Long fooId;

    @OneToMany(mappedBy = "bar")
    private List<Bar> bars;
}

public class Bar {
    private Long barId;

    @ManyToOne
    @JoinColumn(name = "fooId")
    private Foo foo;
}</code>
Copier après la connexion

Relation plusieurs-à-plusieurs bidirectionnelle utilisant Hibernate -Table de jointure gérée

Pour une relation plusieurs-à-plusieurs bidirectionnelle à l'aide d'une table de jointure gérée par Hibernate, annotez chaque classe avec @OneToMany. Créez une classe de table de jointure qui mappe la relation entre les deux classes. Annotez la table de jointure avec @Entity et @Table et mappez les colonnes aux clés primaires des classes parent et enfant.

Exemple :

<code class="java">public class Foo {
    private Long fooId;

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

public class Bar {
    private Long barId;

    @OneToMany
    @JoinTable(name="FOO_BAR",
        joinColumns = @JoinColumn(name="barId"),
        inverseJoinColumns = @JoinColumn(name="fooId"))
    private List<Foo> foos;
}</code>
Copier après la connexion

Many-to-Many bidirectionnel Relation à l'aide d'un objet de table de jointure géré par l'utilisateur

Pour une relation plusieurs-à-plusieurs bidirectionnelle à l'aide d'un objet de table de jointure géré par l'utilisateur, créez une table de jointure classe qui cartographie la relation entre les deux classes. Annotez la table de jointure avec @Entity et @Table et mappez les colonnes aux clés primaires des classes parent et enfant. Annotez chaque classe avec @OneToMany et mappez les champs à la classe de table de jointure.

Exemple :

<code class="java">public class Foo {
    private Long fooId;

    @OneToMany(mappedBy = "bar")
    private List<FooBar> bars;
}

public class Bar {
    private Long barId;

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

@Entity
@Table(name="FOO_BAR")
public class FooBar {
    private UUID fooBarId;

    @ManyToOne
    @JoinColumn(name = "fooId")
    private Foo foo;

    @ManyToOne
    @JoinColumn(name = "barId")
    private Bar bar;

    // You can store other objects/fields on this table here.
}</code>
Copier après la connexion

Détermination de la direction de la cascade

Hibernate peut mettre en cascade des opérations dans un sens ou dans les deux sens dans une relation bidirectionnelle. Cascadez les changements dans la direction souhaitée en marquant l’annotation @OneToMany sur la classe propriétaire. Généralement, il convient de marquer les cascades du côté propriétaire de la relation.

Suppression des orphelins

La suppression des orphelins garantit que les objets orphelins qui ne sont plus associés à un objet parent sont automatiquement supprimés de la base de données. Activez la suppression des orphelins en définissant orphanRemoval = true sur l'annotation @OneToMany.

Traitement de LazyInitializationException

LazyInitializationException se produit lorsqu'une entité contenant une collection récupérée paresseusement est accédée avant que la collection ne soit initialisée. Pour résoudre, initialisez explicitement la collection à l'aide de Hibernate.initialize() ou utilisez fetchType = FetchMode.EAGER sur l'annotation @OneToMany pour charger la collection avec impatience.

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