Bonjour,
J'utilise Hibernate 4.2.7.
il y a un an, j'ai voulu développer un application à partir d'une base de données existante.
Cette base de données a pour caractéristiques notables :
- Plus de 200 tables
- Aucune des tables n'est caractérisée par une clé primaire
- Presque toutes les tables sont caractérisées par un champ ou plusieurs champs avec une contrainte d'unicité (qui pourraient servir de clé primaire)
Pour garder une certaine rétrocompatibilité avec l'existant, je ne pouvais pas modifier la base de données.
J'ai utilisé l'outil de reverse engineering, hbm2java, pour récupérer le modèle de données sous forme de classes Java.
Mon fichier de description ressemble à ceci :
Code:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-reverse-engineering PUBLIC "-//Hibernate/Hibernate Reverse Engineering DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-reverse-engineering-3.0.dtd" >
<hibernate-reverse-engineering>
<table-filter match-schema="MYSCHEMA" match-name="MYTABLE1" />
<table-filter match-schema="MYSCHEMA" match-name="MYTABLE2" />
<table-filter match-schema="MYSCHEMA" match-name="MYTABLE3" />
<!-- ... -->
<table-filter match-schema="MYSCHEMA" match-name="MYTABLE300" exclude="true" />
<table-filter match-schema="MYSCHEMA" match-name="MYTABLE301" exclude="true" />
</hibernate-reverse-engineering>
Ce qui a eu pour effect de générer trois classes Java pour chacune des tables non exclues :
- une classe nommée TableX :
Code:
@Entity
@Table(name = "MYTABLE1", schema = "MYSCHEMA", uniqueConstraints = @UniqueConstraint(columnNames = "MYFIELD1"))
public class Mytable1 implements java.io.Serializable { ... }
- une classe nommée TableXId
Code:
@Embeddable
public class Mytable1Id implements java.io.Serializable { ... }
- une classe nommée TableXHome
Code:
public class FdutitHome {
@Autowired
private SessionFactory sessionFactory;
/* some generated methods for CRUD operations... */
}
Voici mes questions :
- Aurais-je pu générer qu'une seule classe TableX à la place de TableX et TableXId ?
- Comment aurais-je dû procéder ?
- Aurais-je pu lier deux classes entre elles et décrire quelque part les dépendances ?
- Par exemple il y a une table qui représente les clients et une autre table qui contient les conseillers, comment aurais-je pu faire le lien entre les deux sans modifier la base de données ?