2016-04-05 22 views
0

Wir erlauben doppelte Datensätze in der Datenbank mit Ausnahme von ID. Wenn ein Datensatz aktualisiert wird, möchten wir alle Duplikate finden und aktualisieren. Durch Recherche habe ich die Hibernate-Event-Methode beforeUpdate und afterUpdate gefunden. Das Problem ist, dass, wenn ich Duplikate finden und starten Sie durch sie iterieren, ich diesen Fehler:So aktualisieren Sie doppelte Datensätze in Grails

ERROR: Reihe wurde durch eine andere Transaktion aktualisiert oder gelöscht (oder nicht gespeicherte Wertzuordnung falsch war)

Hier ist meine NachAktualisierung Code in der Domäne:

1  def afterUpdate() { 
2   println "\n*** afterUpdate ***" 
3   def record = this 
4 
5   DomainObject.createCriteria().list() { 
6    ne('id', record.id) 
7    or { 
8     eq('storeId', record.storeId) 
9     and { 
10      eq('firstName', record.firstName) 
11      eq('lastName', record.lastName) 
12      eq('dateOfBirth', record.dateOfBirth) 
13     } 
14    } 
15    //eq('lastUpdated', record.lastUpdated) 
16   }.each { dupe -> 
17    log.info "syncing ${dupe.id} with ${record.id}" 
18    dupe.properties.each{ key, value -> 
19     println "*** prop: ${key}: ${value}" 
20    } 
21   } 
22  } 
23 

der Fehler ist auf der Leitung 19. Wir sind mit Grails 2.4.4 und Entwicklung auf

Windows-

Antwort

2

Werfen Sie einen Blick die documentation an. Achten Sie auf diesem Abschnitt über die Verwendung von withNewSession:

class Person { 
    String name 
    def beforeDelete() { 
     ActivityTrace.withNewSession { 
     new ActivityTrace(eventName: "Person Deleted", data: name).save() 
     } 
    } 
} 

Notice the usage of withNewSession method above. Since events are triggered whilst Hibernate is flushing using persistence methods like save() and delete() won't result in objects being saved unless you run your operations with a new Session.

Fortunately the withNewSession method lets you share the same transactional JDBC connection even though you're using a different underlying Session.

+0

Mist, ich muss den .withNewSession Teil verpasst haben! Danke Joshua! – havoc74

Verwandte Themen