[Spring][Hibernate] Données modifiées en base après une lecture
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
Code:
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 B
Code:
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> |
Mapping de C
Code:
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> |
Le code Java:
Code:
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();
}
}
}
); |
Après l'exécution de ce code, les champs COMMENT_1 et COMMENT_2 sont passés à null pour les lignes
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.