Bonjour,

Je j'utilise GORM pour sauvegarder des occurrences dans une base de données à partir d'un fichier Excel.

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
 
new ExcelBuilder(excelFile.inputStream).eachLine([labels: true, sheet: 0]) {
				if (cell(0)) {
					def nameA = cell(0)
					def nameB = cell(1)
					def a = Chapitre.findByNom(nameA)
 
					def code = cell(2)
					def designation = cell(3)
 
					if (code == null || nameA == null || nameB == null) {
						flash.messages << "error"
					} else if (!Chapitre.findByNom(nameA)) {
						flash.messages << "error"
					} else if ( Rubrique.where{nom == nameB && chapitre == a}.list().size() == 0) {
						flash.messages << "error"
					} else if(Object.where{rubrique == Rubrique.findByNom(nameB) && c == code && d == designation}.count() > 0){
						flash.messages << "error"
					} else {
 
							def b = Rubrique.findByNom(nameB)
 
							//request.getSession().removeAttribute("nuisanceType")
							def isNew = false;
 
							Object.withNewSession {session2->
								def object = Object.findOrCreateByCode(code)
 
								if(object.designation == null)
									isNew = true;
 
								object.rubrique = b
								object.d= (designation == null)?"":designation
//								try	{
									rowCount += object.save()? 1 : 0
//								} catch(ValidationException) {
//									  if(isNew)
//										  rowCount++;
//									  log.info("ErreuRRRRRRRRrrrRRrrRrRRrrrrRrrrRrrrRrrrr")
//								}
							}
					}
				}
				currentLine++
}
flash.messages << "${rowCount} ligne create or update"

Une mise à jour sera effective sans aucun soucis, les lignes du fichier Excel continuent d'être itérées et l'enregistrement en base de données est efficace pour cette occurrence.

Cependant, quand il vient à l'insertion (save) d'un nouvel objet, je reçois une erreur à la sauvegarde :
" org.springframework.dao.DuplicateKeyException: a different object with the same identifier value was already associated with the session: [fen.NuisanceType#2202]; nested exception is org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session"

L'enregistrement de l'objet en question est efficace, mais l'erreur soulevée bloque le parcours du fichier.

Quand je décommente la «try and catch" je contourne l'erreur et ainsi toutes mes nouvelles occurrences du fichier sont créés dans la base de données.

J'ai donc trouvé un moyen de contourner mon soucis, mais je ne le trouve pas très propre et je viens à vous pour essayer de comprendre mon problème.

Avez-vous des idees ?

Je vous remercie par avance