Bonjour j ai encore un probleme avec hibernate 2.8
voici mon code

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
 
public InnerClass batch(List<Infogene> liste) throws HibernateException {
		Session session = null;
		List list = null;
		Transaction tx = null;
		int nbEnrModifie=0;
		int nbEnrEnregistre=0;
		String mgsError = null;
		try {
			session = HibernateUtil.currentSession();
			tx = session.beginTransaction();
			AvinfogePojo pojo= null;
 
			for (Infogene element : liste) {
				mgsError=" le num de dossier est :" + element.getNoDossier();
				if(("3496".trim()).equals(element.getNoDossier().trim()))
					mgsError=" le num de dossier est :" + element.getNoDossier();
				/*list =session
							.createQuery(
									" select from AvinfogePojo as base  where base.id.noDossier = ?")
							.setString(0, element.getNoDossier().trim()).list();*/
 
				list = session
				.find("from AvinfogePojo as base  where base.id.noDossier = ?",element.getNoDossier().trim(),Hibernate.STRING);
 
			if(list.size()>0)
			{
				pojo = (AvinfogePojo) list.get(0);
				updatePojo(element,pojo);
				session.update(pojo);
				nbEnrModifie++;
			}
			else
			{
				pojo = this.creerPojo(element);
				session.save(pojo);
				nbEnrEnregistre++;
			}			
 
		}
			tx.commit();
			InnerClass rep = new InnerClass(); 
			rep.setNbEnrEnregistre(nbEnrEnregistre);
			rep.setNbEnrModifie(nbEnrModifie);
			rep.setNbEnrModifie(nbEnrModifie);
			return rep;
 
		} catch (HibernateException e) {
			if (tx != null)
				tx.rollback();
 
			throw new ServiceException(e.getMessage()+ mgsError, e);
 
		}
 
		finally {
 
 
			HibernateUtil.closeSession();
 
		}
	}
ma console d erreur
11:55:48,648 DEBUG SessionImpl:1537 - find: from AvinfogePojo as base where base.id.noDossier = ?
11:55:48,648 DEBUG QueryParameters:119 - parameters: [3496]
11:55:48,648 DEBUG SessionImpl:2267 - flushing session
11:55:48,648 DEBUG SessionImpl:2467 - Flushing entities and processing referenced collections
11:55:48,648 DEBUG SessionImpl:2808 - Processing unreferenced collections
11:55:48,648 DEBUG SessionImpl:2822 - Scheduling collection removes/(re)creates/updates
11:55:48,648 DEBUG SessionImpl:2291 - Flushed: 1 insertions, 0 updates, 0 deletions to 2 objects
11:55:48,648 DEBUG SessionImpl:2296 - Flushed: 0 (re)creations, 0 updates, 0 removals to 0 collections
11:55:48,664 DEBUG Printer:75 - listing entities:
11:55:48,664 DEBUG Printer:82 - ca.canassistance.pojo.AvinfogePojo{groupeClient=2541, idAccident=N, idUser=STAR, dtModif=20090218, noCertificatSam=2564784, doubleAss=, id=AvinfogeId{noDossier=5419, noGroupe=052104, noCertificat=2564784, dtEvenement=20060208}}
11:55:48,664 DEBUG Printer:82 - ca.canassistance.pojo.AvinfogePojo{groupeClient=, idAccident=N, idUser=STAR, dtModif=20090218, noCertificatSam=214554245254, doubleAss=, id=AvinfogeId{noDossier=5814, noGroupe=052645, noCertificat=2145542452, dtEvenement=20060428}}
11:55:48,664 DEBUG SessionImpl:2321 - changes must be flushed to space: AVINFOGE
11:55:48,664 DEBUG SessionImpl:1819 - Need to execute flush
11:55:48,664 DEBUG SessionImpl:2380 - executing flush
11:55:48,664 DEBUG EntityPersister:447 - Inserting entity: [ca.canassistance.pojo.AvinfogePojo#ca.canassistance.pojo.AvinfogeId@42294161]
11:55:48,664 DEBUG BatcherImpl:204 - about to open: 0 open PreparedStatements, 0 open ResultSets
11:55:48,664 DEBUG SQL:230 - insert into AVINFOGE (IG_ID_DOUBLE_ASS, IG_GROUPE_CLIENT, IG_NO_CERTIFICAT_SAM, IG_ID_USER, IG_DT_MODIF, IG_ID_ACCIDENT, IG_NO_GROUPE, IG_NO_CERTIFICAT, IG_DT_EVENEMENT, IG_NO_DOSSIER) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
11:55:48,664 DEBUG BatcherImpl:253 - preparing statement
11:55:48,664 DEBUG EntityPersister:382 - Dehydrating entity: [ca.canassistance.pojo.AvinfogePojo#ca.canassistance.pojo.AvinfogeId@42294161]
11:55:48,664 DEBUG StringType:46 - binding '' to parameter: 1
11:55:48,664 DEBUG StringType:46 - binding '' to parameter: 2
11:55:48,664 DEBUG StringType:46 - binding '214554245254' to parameter: 3
11:55:48,664 DEBUG StringType:46 - binding 'STAR' to parameter: 4
11:55:48,664 DEBUG IntegerType:46 - binding '20090218' to parameter: 5
11:55:48,664 DEBUG StringType:46 - binding 'N' to parameter: 6
11:55:48,664 DEBUG StringType:46 - binding '052645' to parameter: 7
11:55:48,664 DEBUG StringType:46 - binding '2145542452' to parameter: 8
11:55:48,664 DEBUG IntegerType:46 - binding '20060428' to parameter: 9
11:55:48,664 DEBUG StringType:46 - binding '5814' to parameter: 10
11:55:48,664 DEBUG BatcherImpl:28 - Adding to batch
11:55:48,664 DEBUG BatcherImpl:50 - Executing batch size: 1
11:55:48,664 DEBUG JDBCExceptionReporter:49 - SQL Exception
java.sql.BatchUpdateException: ORA-00001: unique constraint (FACTCAN.AVINFOGE_INDEX1) violated

at oracle.jdbc.driver.DatabaseError.throwBatchUpdateException(DatabaseError.java:343)
at oracle.jdbc.driver.OraclePreparedStatement.executeBatch(OraclePreparedStatement.java:10698)
at net.sf.hibernate.impl.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:54)
at net.sf.hibernate.impl.BatcherImpl.executeBatch(BatcherImpl.java:128)
at net.sf.hibernate.impl.SessionImpl.executeAll(SessionImpl.java:2438)
at net.sf.hibernate.impl.SessionImpl.execute(SessionImpl.java:2392)
at net.sf.hibernate.impl.SessionImpl.autoFlushIfRequired(SessionImpl.java:1821)
at net.sf.hibernate.impl.SessionImpl.getQueries(SessionImpl.java:1578)
at net.sf.hibernate.impl.SessionImpl.find(SessionImpl.java:1543)
at net.sf.hibernate.impl.SessionImpl.find(SessionImpl.java:1531)
at net.sf.hibernate.impl.SessionImpl.find(SessionImpl.java:1527)
at ca.canassistance.model.dao.AvinfogeDAO.batch(AvinfogeDAO.java:210)
at ca.canassistance.service.AvingogeServicePersistance.batch(AvingogeServicePersistance.java:72)
at ca.canassistance.batch.MettreJourInfogene.<init>(MettreJourInfogene.java:139)
at ca.canassistance.batch.MettreJourInfogene.main(MettreJourInfogene.java:809)
11:55:48,664 WARN JDBCExceptionReporter:57 - SQL Error: 1, SQLState: 23000
11:55:48,664 ERROR JDBCExceptionReporter:58 - ORA-00001: unique constraint (FACTCAN.AVINFOGE_INDEX1) violated

11:55:48,664 WARN JDBCExceptionReporter:57 - SQL Error: 1, SQLState: 23000
11:55:48,664 ERROR JDBCExceptionReporter:58 - ORA-00001: unique constraint (FACTCAN.AVINFOGE_INDEX1) violated

11:55:48,664 DEBUG BatcherImpl:211 - done closing: 0 open PreparedStatements, 0 open ResultSets
11:55:48,664 DEBUG BatcherImpl:275 - closing statement
11:55:48,664 DEBUG JDBCExceptionReporter:49 - Could not execute JDBC batch update
java.sql.BatchUpdateException: ORA-00001: unique constraint (FACTCAN.AVINFOGE_INDEX1) violated
at oracle.jdbc.driver.DatabaseError.throwBatchUpdateException(DatabaseError.java:343)
at oracle.jdbc.driver.OraclePreparedStatement.executeBatch(OraclePreparedStatement.java:10698)
at net.sf.hibernate.impl.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:54)
at net.sf.hibernate.impl.BatcherImpl.executeBatch(BatcherImpl.java:128)
at net.sf.hibernate.impl.SessionImpl.executeAll(SessionImpl.java:2438)
at net.sf.hibernate.impl.SessionImpl.execute(SessionImpl.java:2392)
at net.sf.hibernate.impl.SessionImpl.autoFlushIfRequired(SessionImpl.java:1821)
at net.sf.hibernate.impl.SessionImpl.getQueries(SessionImpl.java:1578)
at net.sf.hibernate.impl.SessionImpl.find(SessionImpl.java:1543)
at net.sf.hibernate.impl.SessionImpl.find(SessionImpl.java:1531)
at net.sf.hibernate.impl.SessionImpl.find(SessionImpl.java:1527)
at ca.canassistance.model.dao.AvinfogeDAO.batch(AvinfogeDAO.java:210)
at ca.canassistance.service.AvingogeServicePersistance.batch(AvingogeServicePersistance.java:72)
at ca.canassistance.batch.MettreJourInfogene.<init>(MettreJourInfogene.java:139)
at ca.canassistance.batch.MettreJourInfogene.main(MettreJourInfogene.java:809)
11:55:48,664 WARN JDBCExceptionReporter:57 - SQL Error: 1, SQLState: 23000
11:55:48,664 ERROR JDBCExceptionReporter:58 - ORA-00001: unique constraint (FACTCAN.AVINFOGE_INDEX1) violated

11:55:48,664 WARN JDBCExceptionReporter:57 - SQL Error: 1, SQLState: 23000
11:55:48,664 ERROR JDBCExceptionReporter:58 - ORA-00001: unique constraint (FACTCAN.AVINFOGE_INDEX1) violated

11:55:48,664 ERROR SessionImpl:2400 - Could not synchronize database state with session
Premierement je fais pas une insertion bien un find
Ok je suis pas sur le la facon que hibernate fait sont find
mais admettons qu il fait une insertion. Il n y a pas de violation d index
verification avec oracle

on plus on peut voir que l insertion cause probleme pour le num
IG_NO_DOSSIER 5814
qui ne fait pas du tout parti de ma requete.
J avoue rien comprendre
noDossier=3496 est la valeur de mon NoDossier

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
 
 
CREATE UNIQUE INDEX "FACTCAN"."AVINFOGE_INDEX1" ON "FACTCAN"."AVINFOGE" ("IG_NO_GROUPE", "IG_NO_CERTIFICAT", "IG_DT_EVENEMENT", "IG_NO_DOSSIER") 
  PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS 
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
  TABLESPACE "FACTCAN" ;
 
  CREATE INDEX "FACTCAN"."AVINFOGE_INDEX2" ON "FACTCAN"."AVINFOGE" ("IG_NO_DOSSIER") 
  PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS 
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
  TABLESPACE "FACTCAN" ;
l erreur semble sous l insertion du dossier
hibernate try to Inserting IG_NO_DOSSIER 5814
12:07:30,564 DEBUG SQL:230 - insert into AVINFOGE (IG_ID_DOUBLE_ASS, IG_GROUPE_CLIENT, IG_NO_CERTIFICAT_SAM, IG_ID_USER, IG_DT_MODIF, IG_ID_ACCIDENT, IG_NO_GROUPE, IG_NO_CERTIFICAT, IG_DT_EVENEMENT, IG_NO_DOSSIER) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
12:07:30,564 DEBUG BatcherImpl:253 - preparing statement
12:07:30,564 DEBUG EntityPersister:382 - Dehydrating entity: [ca.canassistance.pojo.AvinfogePojo#ca.canassistance.pojo.AvinfogeId@42294161]
12:07:30,564 DEBUG StringType:46 - binding '' to parameter: 1
12:07:30,564 DEBUG StringType:46 - binding '' to parameter: 2
12:07:30,564 DEBUG StringType:46 - binding '214554245254' to parameter: 3
12:07:30,564 DEBUG StringType:46 - binding 'STAR' to parameter: 4
12:07:30,564 DEBUG IntegerType:46 - binding '20090218' to parameter: 5
12:07:30,564 DEBUG StringType:46 - binding 'N' to parameter: 6
12:07:30,564 DEBUG StringType:46 - binding '052645' to parameter: 7
12:07:30,564 DEBUG StringType:46 - binding '2145542452' to parameter: 8
12:07:30,564 DEBUG IntegerType:46 - binding '20060428' to parameter: 9
12:07:30,564 DEBUG StringType:46 binding '5814' to parameter: 10
12:07:30,564 DEBUG BatcherImpl:28 - Adding to batch
12:07:30,564 DEBUG BatcherImpl:50 - Executing batch size: 1
IG_NO_DOSSIER = 5814 ou IG_NO_DOSSIER = 3496 qui est la valeur
de ma requete
ne viole pas la contrainte de l index primaire
de tout facon fait un pas d insert


mon pojo


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
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
 
 
package ca.canassistance.pojo;
 
import java.io.Serializable;
import java.util.List;
 
import net.sf.hibernate.HibernateException;
import ca.canassistance.model.Infogene;
import ca.canassistance.model.dao.AvinfogeDAO;
 
/**
 * This class has been automatically generated by Hibernate Synchronizer. For
 * more information or documentation, visit The Hibernate Synchronizer page at
 * http://www.binamics.com/hibernatesync or contact Joe Hudson at
 * joe@binamics.com.
 * 
 * This is an object that contains data related to the AVINFOGE table. Do not
 * modify this class because it will be overwritten if the configuration file
 * related to this class is modified.
 * 
 * @hibernate.class table="AVINFOGE"
 */
public class AvinfogePojo implements Serializable {
 
	/**
         * 
         */
	private static final long serialVersionUID = -2444185467393453780L;
 
	// fields
	private java.lang.String doubleAss;
 
	private java.lang.String groupeClient;
 
	private java.lang.String noCertificatSam;
 
	private java.lang.String idUser;
 
	private java.lang.Integer dtModif;
 
	private java.lang.String idAccident;
 
	private AvinfogeId id;
 
	private AvinfogeDAO dao;
 
	// constructors
	public AvinfogePojo(String doubleAss, Integer dtEvenement,
			String groupeClient, String noDossier, String noCertificatSam,
			String noCertificat, String noGroupe, String idUser,
			Integer dtModif, String idAccident) {
		AvinfogeId avinfogeId = new AvinfogeId();
		avinfogeId.setDtEvenement(dtEvenement);
		avinfogeId.setNoCertificat(noCertificat.trim());
		avinfogeId.setNoDossier(noDossier);
		avinfogeId.setNoGroupe(noGroupe);
		this.setDoubleAss(doubleAss);
 
		this.setGroupeClient(groupeClient);
		this.setNoCertificatSam(noCertificatSam);
		this.setIdUser(idUser);
		this.setDtModif(dtModif);
		this.setIdAccident(idAccident);
		this.setId(avinfogeId);
 
	}
 
	public AvinfogePojo() {
		initialize();
	}
 
	public AvinfogePojo(Infogene infogene) {
		AvinfogeId id = new AvinfogeId();
		id.setDtEvenement(infogene.getDtEvenement());
		id.setNoCertificat(infogene.getNoCertificat().trim());
		id.setNoDossier(infogene.getNoDossier());
		id.setNoGroupe(infogene.getNoGroupe());
		this.setId(id);
		this.setDoubleAss(infogene.getIdDoubleAss());
		// this.setDtModif(avinfoge.getModif);
		this.setGroupeClient(infogene.getGroupeClient());
		this.setIdAccident(infogene.getIdAccident());
		this.setNoCertificatSam(infogene.getNoCertificatSam());
		// avinfoge.getn
 
	}
 
	protected void initialize() {
	}
 
	public static long getSerialVersionUID() {
		return serialVersionUID;
	}
 
	public java.lang.String getDoubleAss() {
		return doubleAss;
	}
 
	public void setDoubleAss(java.lang.String doubleAss) {
		this.doubleAss = doubleAss;
	}
 
	public java.lang.Integer getDtModif() {
		return dtModif;
	}
 
	public void setDtModif(java.lang.Integer dtModif) {
		this.dtModif = dtModif;
	}
 
	public java.lang.String getGroupeClient() {
		return groupeClient;
	}
 
	public void setGroupeClient(java.lang.String groupeClient) {
		this.groupeClient = groupeClient;
	}
 
	public AvinfogeId getId() {
		return id;
	}
 
	public void setId(AvinfogeId id) {
		this.id = id;
	}
 
	public java.lang.String getIdAccident() {
		return idAccident;
	}
 
	public void setIdAccident(java.lang.String idAccident) {
		this.idAccident = idAccident;
	}
 
	public java.lang.String getIdUser() {
		return idUser;
	}
 
	public void setIdUser(java.lang.String idUser) {
		this.idUser = idUser;
	}
 
	public java.lang.String getNoCertificatSam() {
		return noCertificatSam;
	}
 
	public void setNoCertificatSam(java.lang.String noCertificatSam) {
		this.noCertificatSam = noCertificatSam;
	}
 
	public boolean estDansLaBase(String cleDossier) throws HibernateException {
		if (dao == null)
			this.setDao(new AvinfogeDAO());
		List l = this.getDao().find(cleDossier);
		if (l != null)
			return true;
		return false;
 
	}
 
	public AvinfogeDAO getDao() {
		return dao;
	}
 
	public void setDao(AvinfogeDAO dao) {
		this.dao = dao;
	}
 
	@Override
	public int hashCode() {
		final int PRIME = 31;
		int result = 1;
		result = PRIME * result
				+ ((doubleAss == null) ? 0 : doubleAss.hashCode());
 
		result = PRIME * result + ((dtModif == null) ? 0 : dtModif.hashCode());
		result = PRIME * result
				+ ((groupeClient == null) ? 0 : groupeClient.hashCode());
		result = PRIME * result + ((id == null) ? 0 : id.hashCode());
		result = PRIME * result
				+ ((idAccident == null) ? 0 : idAccident.hashCode());
		result = PRIME * result + ((idUser == null) ? 0 : idUser.hashCode());
 
		result = PRIME * result
				+ ((noCertificatSam == null) ? 0 : noCertificatSam.hashCode());
 
		return result;
	}
 
	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		final AvinfogePojo other = (AvinfogePojo) obj;
		if (dao == null) {
			if (other.dao != null)
				return false;
		} else if (!dao.equals(other.dao))
			return false;
		if (doubleAss == null) {
			if (other.doubleAss != null)
				return false;
		} else if (!doubleAss.equals(other.doubleAss))
			return false;
 
		if (dtModif == null) {
			if (other.dtModif != null)
				return false;
		} else if (!dtModif.equals(other.dtModif))
			return false;
		if (groupeClient == null) {
			if (other.groupeClient != null)
				return false;
		} else if (!groupeClient.equals(other.groupeClient))
			return false;
		if (id == null) {
			if (other.id != null)
				return false;
		} else if (!id.equals(other.id))
			return false;
		if (idAccident == null) {
			if (other.idAccident != null)
				return false;
		} else if (!idAccident.equals(other.idAccident))
			return false;
		if (idUser == null) {
			if (other.idUser != null)
				return false;
		} else if (!idUser.equals(other.idUser))
			return false;
 
		if (noCertificatSam == null) {
			if (other.noCertificatSam != null)
				return false;
		} else if (!noCertificatSam.equals(other.noCertificatSam))
			return false;
 
		return true;
	}
 
}
my hbm


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
 
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
	"-//Hibernate/Hibernate Mapping DTD//EN"
	"http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd" >
 
<hibernate-mapping package="ca.canassistance.pojo">
	<class 
		name="AvinfogePojo"
		table="AVINFOGE"
	>
 
 
 
 
	 <composite-id name="id" class="ca.canassistance.pojo.AvinfogeId">
 
        <key-property name="noGroupe" column="IG_NO_GROUPE" type="string" length="6"/>
        <key-property name="noCertificat" column="IG_NO_CERTIFICAT" type="string"  length="10"/>
        <key-property name="dtEvenement" column="IG_DT_EVENEMENT" type="integer" length="8"/>
        <key-property name="noDossier" column="IG_NO_DOSSIER" type="string" length="6"/>
      </composite-id>
 
		<property
			name="doubleAss"
			column="IG_ID_DOUBLE_ASS"
			type="string"
			not-null="false"
			length="1"
		/>
 
		<property
			name="groupeClient"
			column="IG_GROUPE_CLIENT"
			type="string"
			not-null="false"
			length="8"
		/>
		<property
			name="noCertificatSam"
			column="IG_NO_CERTIFICAT_SAM"
			type="string"
			not-null="false"
			length="20"
		/>
 
 
		<property
			name="idUser"
			column="IG_ID_USER"
			type="string"
			not-null="false"
			length="4"
		/>
		<property
			name="dtModif"
			column="IG_DT_MODIF"
			type="integer"
			not-null="false"
			length="8"
		/>
		<property
			name="idAccident"
			column="IG_ID_ACCIDENT"
			type="string"
			not-null="false"
			length="1"
		/>
 
 
</class>
</hibernate-mapping>