Ceci est le second volet de la série d’articles expliquant le fonctionnement d’Hibernate et comment l’utiliser au mieux. Le mois dernier, nous avions vu ce qu’était le cache de premier niveau et combien il était fondamental. Ce mois-ci, nous nous attaquons à un autre point épineux : la gestion des liens inverses dans une relation.
Pour une meilleure compréhension, commençons d’abord par quelques définitions : • Un lien est une information qui permet à partir d’une entité A d’atteindre le ou les entités B liées à A pour une raison donnée (A est propriétaire de B par exemple). Un lien est un attribut appartenant à A. Ce peut être soit une simple référence vers un B (on parlera alors de lien " unique "), soit une collection de B (on parlera alors de lien " multiple "). C’est une notion qui est directement implémentable en Java. Mais pas en Base de données. • Une relation est un lien libre (c'est-à-dire non asservi) ou un couple de liens asservis. Un lien est asservi à un autre, si leurs valeurs doivent être maintenues en cohérence. Par exemple si A désigne B par le premier lien du couple, il faut que B désigne A par l’autre lien asservi. Une relation n’appartient ni à A, ni à B puisqu’en fait, elle est située entre les deux entités. Une relation est matérialisée en Base de données par une clé étrangère. Elle n’a pas de représentation directe en Java. Il existe trois types de relations : les relations 1 pour 1, 1 pour N et N pour N. • Un lien L1 est dit inverse de L2 si L1 et L2 sont asservis, c'est-àdire s’ils forment, ensemble, une relation. Notons que si L1 est inverse de L2, L2 est obligatoirement inverse de L1. Un lien ne peut être inverse que, d’au plus, un autre lien.
Henri Darmet