Bonjour tout le monde,
J'ai cherché un peu partout sur Google, mais je n'ai rien trouvé qui puisse m'aider.
J'essaie de créer un mapping de type one-to-many avec Hibernate. La récupération de données fonctionne très bien, c'est l'insertion de données qui pêche.
Je m'explique, j'ai une classe Classe1, mappée vers une première table, qui possède un attribut de type Set<Classe2>, mappé vers une deuxième table. Lorsque j'essaie d'insérer des données, tout fonctionne au niveau de la première table, mais rien ne se passe sur la deuxième. Je ne reçoit aucun message d'erreur.
Voici mon code:
Avec le premier fichier de mapping
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 public class Classe1 implements Serializable{ private int id; private Set<Classe2> queries=new HashSet<Classe2>(0); ... Constructeurs Getters/Setters }
Ma deuxième classe:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 <hibernate-mapping> <class name="Classe1" table="AT01"> <id name="id" type="int" column="AT01_ID"> <generator class="increment"/> </id> <set name="queries" table="AT03" inverse="true" lazy="true" > <key not-null="true"> <column name="AT03_ID1"/> </key> <one-to-many class="Classe2"/> </set> </class> </hibernate-mapping>
Et le fichier de mapping:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 public class Classe2 implements Serializable{ private int id1; private int id2; private String data; public Classe2(int id2, String data) { super(); this.id2 = id2; this.data = data; } public Classe2() { super(); } ... Getters/Setters }
Pour insérer les données, je procède comme suit:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 <hibernate-mapping> <class name="Classe2" table="AT03"> <composite-id> <key-many-to-one name="id1" class="Classe1" column="AT03_ID1" /> <key-property name="id2" type="int"> <column name="AT03_ID2" /> </key-property> </composite-id> <property name="data" type="java.lang.String"> <column name="AT03_DATA" /> </property> </class> </hibernate-mapping>
J'espère que vous pourrez m'aider
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 Configuration config = initializeConfiguration(); config.addClass(Classe1.class); config.addClass(Classe2.class); Session session = config.buildSessionFactory().openSession(); Set<Classe2> monSet= new HashSet<Classe2>(0); monSet.add(new Classe2(1, "toto")); monSet.add(new Classe2(1, "titi")); monSet.add(new Classe2(1, "tata")); session.beginTransaction(); Classe1 objetPrincipal = new Classe1(monSet); session.save(objetPrincipal); session.getTransaction().commit();
Partager