Maison >Java >javaDidacticiel >Comment définir les relations entre les entités dans Hibernate 4 et Spring à l'aide d'annotations ?
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>
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>
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>
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>
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>
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>
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.
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.
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!