Bonjour à tous,
Voilà mon problème est assez simple:
J'ai une série de tables (A -> B -> C et A -> D). Lorsque que je récupère la liste des valeurs de B en utilisant la clé d'un A connu ; j'ai deux champs de la table C qui sont passés à null.
je voudrais savoir comment c'est possible et comment y remédier ...
Mapping de A
Mapping de B
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
16 <hibernate-mapping> <class name="com.mycompany.A" table="MY_A"> <id name="cleA" column="CLE_A" type="string" length="14"> <generator class="assigned" /> </id> <set name="bSet" inverse="true" lazy="false"> <key column="CLE_A" /> <one-to-many class="com.mycompany.B" /> </set> <set name="dSet" inverse="true" lazy="false"> <key column="CLE_A" /> <one-to-many class="com.mycompany.D" /> </set> </class> </hibernate-mapping>
Mapping de C
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
16
17
18
19
20
21 <hibernate-mapping> <class name="com.mycompany.B" table="MY_B"> <composite-id> <key-property name="cleA" column="CLE_A" type="string" length="14" /> <key-property name="cleB1" column="CLE_B_1" type="string" length="2" /> <key-property name="cleB2" column="CLE_B_2" type="string" length="1" /> <key-property name="cleB3" column="CLE_B_3" type="string" length="3" /> </composite-id> <many-to-one name="a" column="CLE_A" not-null="true" insert="false" update="false" lazy="false" class="com.mycompany.A" /> <set name="cSet" inverse="true" lazy="false"> <key> <column name="CLE_A" /> <column name="CLE_B_1" /> <column name="CLE_B_2" /> <column name="CLE_B_3" /> </key> <one-to-many class="com.mycompany.C" /> </set> </class> <hibernate-mapping>
Le code Java:
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
16
17
18
19
20
21 <hibernate-mapping> <class name="com.mycompany.C" table="MY_C"> <composite-id> <key-property name="cleA" column="CLE_A" type="string" length="14" /> <key-property name="cleB1" column="CLE_B_1" type="string" length="2" /> <key-property name="cleB2" column="CLE_B_2" type="string" length="1" /> <key-property name="cleB3" column="CLE_B_3" type="string" length="3" /> <key-property name="cleC1" column="CLE_C_1" type="string" length="1" /> <key-property name="cleC2" column="CLE_C_2" type="string" length="3" /> </composite-id> <property name="comment1" column="COMMENT_1" type="string" length="1000" /> <property name="comment2" column="COMMENT_2" type="string" length="1000" /> <many-to-one name="b" column="CLE_A" not-null="true" insert="false" update="false" lazy="false"> <column name="CLE_A" /> <column name="CLE_B_1" /> <column name="CLE_B_2" /> <column name="CLE_B_3" /> </many-to-one> </class> </hibernate-mapping>
Après l'exécution de ce code, les champs COMMENT_1 et COMMENT_2 sont passés à null pour les lignes
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 org.springframework.orm.hibernate3.support.HibernateDaoSupport daoSupport = null// for reference; org.springframework.orm.hibernate3.HibernateTemplate template = new HibernateTemplate(daoSupport.getSessionFactory()); java.util.List bList = template.execute( new HibernateCallback() { public Object doInHibernate(Session session) { Criteria criteria = session.createCriteria(B.class); criteria.add(Expression.eq("cleA", "anyValue"); return criteria.list(); } } } );
sélectionnés.
EDIT: Le problème vient de mes setters en Java qui font des contrôles sur l'assignation du champs b dans les instances de C. Apparemment, le champs b n'est pas renseigné quand Hibernate renseigne les deux commentaires.
Cependant je ne comprends pas pourquoi Spring va mettre à jour mes données en base.
Partager