Annotation des relations dans Hibernate 4
Dans Hibernate 4 et Spring, vous pouvez définir diverses relations entre les classes à l'aide d'annotations. Ce qui suit explique comment créer des relations un-à-un, un-à-plusieurs, plusieurs-à-un et plusieurs-à-plusieurs :
Relations unidirectionnelles un-à-un :
- Utilisez @OneToOne sur la classe propriétaire (la clé primaire de la classe propriétaire fait référence à l'autre classe).
- Aucun mappage correspondant requis sur l'autre classe.
Relations bidirectionnelles un-à-un :
- Utilisez @OneToOne(mappedBy = "bar") sur la classe propriétaire pour indiquer la relation est géré par l'autre classe.
- Utilisez @OneToOne sur l'autre classe avec mappedBy pointant vers la classe propriétaire.
Relations un-à-plusieurs unidirectionnelles utilisant Table de jointure gérée par l'utilisateur :
- Utilisez @OneToMany sur la classe propriétaire.
- Utilisez @JoinTable pour définir la table de jointure entre les entités.
- Non mappage requis sur l'autre classe.
Relation bidirectionnelle un-à-plusieurs à l'aide du mappage de clé étrangère :
- Utilisez @OneToMany(mappedBy = "bar") sur la classe propriétaire.
- Utilisez @ManyToOne sur l'autre classe avec mappedBy pointant vers la classe propriétaire.
Many-to-bidirectionnel Beaucoup utilisent la table de jointure gérée par Hibernate :
- Utilisez @OneToMany sur les deux classes pour créer une relation d'auto-référencement.
- Utilisez @JoinTable pour définir la table de jointure.
Plusieurs-à-plusieurs bidirectionnels à l'aide d'un objet de table de jointure géré par l'utilisateur :
- Utilisez @OneToMany sur les deux classes pour créer une relation d'auto-référencement .
- Définissez une classe distincte comme objet de table de jointure.
Détermination du côté « propriétaire » des relations bidirectionnelles :
- En général, la classe qui possède une collection d'une autre classe est considérée comme le côté « propriétaire ».
- Cela détermine où la clé étrangère est stockée et quelle classe gère les modifications.
Sélection de FetchType
- La récupération paresseuse (par défaut) charge les objets associés uniquement lorsque cela est nécessaire.
- La récupération hâtive (set fetchType = FetchType.EAGER) charge le objets associés immédiatement.
Évitez LazyInitializationException en utilisant Hibernate.initialize() ou FetchMode :
- Utilisez Hibernate.initialize(person.getRoles() ); pour charger avec impatience une collection récupérée paresseusement.
- Utilisez setFetchMode("roles", FetchMode.SUBSELECT) sur les critères pour charger avec impatience une collection.
Détermination de la direction de la cascade :
- Utilisez cascade pour spécifier quelles opérations (créer, mettre à jour, supprimer) sont en cascade entre les entités associées.
- Définissez la cascade dans les deux sens si nécessaire, mais seulement si cela a du sens sémantiquement.
Suppression des orphelins :
- Activez la suppression des orphelins sur @OneToMany pour supprimer automatiquement les entités orphelines (entités qui ne sont plus référencé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