Bonjour,

Voilà je récupère un projet sur lequel il y a de l'hibernate mais je n'arrive pas à mettre à jour des données : celles de la table CONTACT_FACTURATION.

En terme de données pures le problème est le suivant :

* Je dispose d'une table FACTURE liée à une table CONTACT_FACTURATION par la clé C_ID_FACT
* J'ai une ligne de facture avec le code C_ID_FACT = 12. Donc ma table FACTURATION se présente ainsi :
C_ID_FACT CH1 CH2
12 a b
* Dans ma table CONTACT_FACTURATION, j'ai les lignes suivantes :
C_ID_CONTACT C_ID_FACT C_FONCTION_FACTURE
1 12 1
2 12 2
* Je cherche donc à modifier le champ C_ID_CONTACT de CONTACT_FACTURATION ---> mais le transaction ne fait rien.

Le mapping dont je dispose est le suivant :

Table FACTURE :
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
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
 
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
    <class name="com.caceis.absalon.metier.Facture" table="FACTURE" >
        <id name="idFacture" type="java.lang.Long" length="9">
            <column name="C_ID_FACT" not-null="true" sql-type="NUMBER" />
            <generator class="increment" />
        </id>
        <property name="codeTypeFacture" type="java.lang.String" update="true" insert="true" >
            <column name="C_TYP_FACTURE" />
        </property>
		<property name="codeFacture" type="java.lang.String" update="true" insert="true">
            <column name="C_FACT" />
        </property>
        <property name="dateDebutFacture" type="java.util.Date" update="true" insert="true">
            <column name="D_DEB_FACTU" />
        </property>
        <property name="dateFinFacture" type="java.util.Date" update="true" insert="true">
            <column name="D_FIN_FACT" />
        </property>
  		<property name="montantAcompteHorsTaxe" type="java.lang.Double" update="true" insert="true">
            <column name="M_ACOMPTE_HT" />
        </property>
        <property name="montantAcompteNet" type="java.lang.Double" update="true" insert="true">
            <column name="M_ACOMPTE_NET" />
        </property>
        <property name="montantDeLaCommissionHorsTaxeSoumisALaTva" type="java.lang.Double" update="true" insert="true">
            <column name="M_COMM_HT_TVA" />
        </property>
        <property name="montantDeLaCommissionHorsTaxeNonSoumisALaTva" type="java.lang.Double" update="true" insert="true">
            <column name="M_COMM_HT_NTVA" />
        </property>
        <property name="montantDeLaTvaDeLaCommission" type="java.lang.Double" update="true" insert="true">
            <column name="M_TVA_COMM" />
        </property>
        <property name="montantDeLaCommissionNetInitiale" type="java.lang.Double" update="true" insert="true">
            <column name="M_COMM_NET_INIT" />
        </property>
        <property name="montantDeLaCommissionNetRestantDu" type="java.lang.Double" update="true" insert="true">
            <column name="M_COMM_NET_RESTANT" />
        </property>
        <property name="montantDesFraisHorsTaxeSoumisALaTva" type="java.lang.Double" update="true" insert="true">
            <column name="M_FRAIS_HT_TVA" />
        </property>
		<property name="montantDesFraisHorsTaxeNonSoumisALaTva" type="java.lang.Double" update="true" insert="true">
            <column name="M_FRAIS_HT_NTVA" />
        </property>
        <property name="montantDeLaTvaDesFrais" type="java.lang.Double" update="true" insert="true">
            <column name="M_TVA_FRAIS" />
        </property>
        <property name="montantDesFraisNetInitial" type="java.lang.Double" update="true" insert="true">
            <column name="M_FRAIS_NET_INIT" />
        </property>
        <property name="montantDesFraisNetRestantDu" type="java.lang.Double" update="true" insert="true">
            <column name="M_FRAIS_NET_RESTANT" />
        </property>
		<property name="montantNetDesAcomptesRegles" type="java.lang.Double" update="true" insert="true">
            <column name="M_ACOMPTE_REGLES" />
        </property>
        <property name="montantTotalDeLaTva" type="java.lang.Double" update="true" insert="true">
            <column name="M_TOTAL_TVA" />
        </property>
        <property name="montantNetRestantDu" type="java.lang.Double" update="true" insert="true">
            <column name="M_NET_RESTANT" />
        </property>
        <property name="montantDeLaMajorationPourNonPaiement" type="java.lang.Double" update="true" insert="true">
            <column name="M_MAJOR" />
        </property>
        <property name="codeStatutDeLaFacture" type="java.lang.String" update="true" insert="true" >
            <column name="C_STATUT_FACT" />
        </property>
        <property name="dateDerniereModificationDeStatut" type="java.util.Date" update="true" insert="true">
            <column name="D_DERNIER_STATUT" />
        </property>
        <property name="dateEmissionDeLaFacture" type="java.util.Date" update="true" insert="true">
            <column name="D_EMISSION_FACT" />
        </property>
        <property name="dateDeReglementPrevu" type="java.util.Date" update="true" insert="true">
            <column name="D_RGLT_THEO" />
        </property>
        <property name="dateDeReglementReel" type="java.util.Date" update="true" insert="true">
            <column name="D_RGLT_REEL" />
        </property>
        <property name="commentaire" type="java.lang.String" update="true" insert="true" >
            <column name="L_COMMENTAIRE_FACT" />
        </property>
        <property name="productionDeKro" type="java.lang.Boolean" update="true" insert="true" >
            <column name="I_PRODUCTION_CRO" />
        </property>
        <property name="dateCreation" type="java.util.Date" update="true" insert="true">
            <column name="D_CREATION" />
        </property>
        <property name="utilisateurCreation" type="java.lang.String" update="true" insert="true">
            <column name="C_UT_CREATION" />
        </property>
        <property name="dateMiseAJour" type="java.util.Date" update="true" insert="true">
            <column name="D_MAJ" />
        </property>
        <property name="utilisateurMiseAJour" type="java.lang.String" update="true" insert="true">
            <column name="C_UT_MAJ" />
        </property>
        <many-to-one name="engagement" column="C_ID_ENGAG" class="com.caceis.absalon.metier.Engagement"  not-null="true" />
        <many-to-one name="facturePere" column="C_ID_FACT_RATTACH" class="com.caceis.absalon.metier.Facture"  not-null="false"  />
        <map name="facturesFilles" inverse="true">
            <key column="C_ID_FACT_RATTACH" />
            <map-key column="C_ID_FACT" type="java.lang.Long" />
            <one-to-many class="com.caceis.absalon.metier.Facture" />
        </map>
        <map name="lignesDeFacturation" inverse="true" cascade="all-delete-orphan">
            <key column="C_ID_FACT" />
            <map-key column="C_ID_LG_FACT" type="java.lang.Long" />
            <one-to-many class="com.caceis.absalon.metier.LigneDeFacturation" />
        </map>
        <map name="cros" inverse="true" cascade="all-delete-orphan">
            <key column="C_ID_FACT" />
            <map-key column="C_ID_CRO" type="java.lang.Long" />
            <one-to-many class="com.caceis.absalon.metier.Cro" />
        </map>
        <map name="relances" inverse="true" cascade="all-delete-orphan">
            <key column="C_ID_FACT" />
            <map-key column="REL_RANG" type="java.lang.Long" />
            <one-to-many class="com.caceis.absalon.metier.Relance" />
        </map>
        <map name="ventilations" inverse="true" cascade="all-delete-orphan">
            <key column="C_ID_FACT" />
            <map-key column="C_ID_ENCAIS" type="java.lang.Long" />
            <one-to-many class="com.caceis.absalon.metier.Ventilation" />
        </map>
        <map name="contactsFacturation" inverse="true"  cascade="all-delete-orphan">
            <key column="C_ID_FACT" />
            <map-key column="C_ID_CONTACT" type="java.lang.Long" />
            <one-to-many class="com.caceis.absalon.metier.ContactFacturation" />
        </map>
    </class>
</hibernate-mapping>
Table CONTACT_FACTURATION :
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
 
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
    <class name="com.caceis.absalon.metier.ContactFacturation" table="CONTACT_FACTURATION">
        <composite-id>
            <key-many-to-one name="facture" column="C_ID_FACT" class="com.caceis.absalon.metier.Facture"  />
            <key-many-to-one name="contact" column="C_ID_CONTACT" class="com.caceis.absalon.metier.Contact"  />
        </composite-id>
        <property name="codeFonctionDuContact" type="java.lang.Long" update="true" insert="true">
            <column name="C_FONCTION_FACTURE" />
        </property>
    </class>
</hibernate-mapping>
Pour éviter de surcharger le post, je ne mets pas tout mais lors de la transaction ma table FACTURE est bien mise à jour en l'occurrence les champs CH1 et CH2. Mais pas la table CONTACT_FACTURATION.

Voici quelques lignes du Bean JAVA de modification :

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
22
23
 
...
Facture facture = (Facture)this.getContext().getSession().getAttribute("facture") ;
			facture = (Facture)session.load(Facture.class, facture.getIdFacture());
			Engagement e = facture.getEngagement();
			facture.setCodeTypeFacture(codeTypeFacture);
			facture.setCommentaire(description);
			try {
				facture.setDateDebutFacture(dateFormater.parse(dateDebutFacture));
				if(dateFinFacture!=null && dateFinFacture.length()>0)
					facture.setDateFinFacture(dateFormater.parse(dateFinFacture));
				else
					facture.setDateFinFacture(null);
 
			} catch (ParseException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			}
 
...
 
facture.setContactsFacturationParFonction(listeContactsFacture);
...
Par contre la méthode "setContactsFacturationParFonction" ne fonctionne pas.

Est-ce un problème de mapping hibernate, un problème de définition de champ ?

Merci par avance pour votre aide sur ce problème, voire des adresses ou je pourrais soumettre ce post ?