Hibernate Tools – empêcher la génération des relations one-to-many
Sommaire
Introduction
Hibernate Tools est très puissant pour générer le code des Java beans et les fichiers de configuration de mapping utilisés par Hibernate. Cependant, le code généré par défaut n’est pas forcément nécessaire. Par exemple, les relations one-to-many
sont souvent inutiles.
Par exemple en considérant les tables USER
et USER_ROLE
et leur Java beans respectifs User
et UserRole
. La relation many-to-one
représentée par la méthode User.getUserState()
est utile. Par contre, la relation one-to-many
représentée par la méthode UserRole.getUsers()
est complètement inutile[1]. Heureusement, les concepteurs de Hibernate Tools ont pensé à nous et nous proposent deux solutions :
- via le fichier reveng.xml[2]
- via le reveng. strategy
Solutions
reveng.xml
Ce fichier permet de configurer le comportement de l’outil de génération du mapping à partir de la base de données table par table. Pour empêcher la génération des relations one-to-many
, il faut ajouter des sections de la forme :
<table schema="MYSCHEMA" name="USER_ROLE"> <foreign-key constraint-name="FK_USER_USER_ROLE"> <many-to-one property="User" exclude="true" /> </foreign-key> </table>
reveng. strategy
Cette méthode consiste à implémenter une classe fille de la classe DelegatingReverseEngineeringStrategy
[3]. L’implémentation de la méthode ci-dessous permet de ne pas générer de relation one-to-many
avec Hibernate Tools :
public boolean excludeForeignKeyAsCollection(String keyname, TableIdentifier fromTable, List fromColumns, TableIdentifier referencedTable, List referencedColumns) { return true; }
Conclusion
La seconde méthode permet d’automatiser le traitement pour l’ensemble des tables dont il est nécessaire de générer le mapping à partir du modèle de la base de données. C’est donc la solution à préférer si l’on souhaite adopter ce comportement par défaut.
Notes
[1] En tout cas pour les utilisations que j’en fait.
[2] Pour le moment, l’éditeur graphique ne permet de configurer cela, il faut le faire à la main.
[3] Cette méthode est très pratique pour automatiser certains comportement qui doivent être commun à toutes les tables, voire toutes les colonnes.
https://blog.lecacheur.com/2006/08/17/hibernate-tools-empecher-la-generation-des-relations-one-to-many/DéveloppementHibernatehibernateIntroduction Hibernate Tools est très puissant pour générer le code des Java beans et les fichiers de configuration de mapping utilisés par Hibernate. Cependant, le code généré par défaut n'est pas forcément nécessaire. Par exemple, les relations one-to-many sont souvent inutiles. Par exemple en considérant les tables USER et USER_ROLE et...SeBSébastien LECACHEUR23r0@laposte.netAdministratorLe weblogue de SeB
Laisser un commentaire