2016-04-05 16 views
0

Ich habe versucht, einen Dienst schreiben, mit einer update(User) Funktion mit SDN 4.0.0. Die Funktion sollte aussehen, es ist ein Benutzer in der Datenbank mit der gleichen ID, und wenn ja, überschreiben Sie diesen Benutzer mit dem neuen.Spring Data Neo4j überschreibt Attribute

ein UserRepository, die die GraphRepository<User> erstreckt ich den folgenden Code geschrieben:

User updateUser(User user){ 
    if(userRepository.findOne(user.getId())!=null){ 
    user = userRepository.save(user); 
    return user; 
    }else{ 
    //Exception handling here 
    } 
} 

Ich habe jetzt das Problem, dass jeder Benutzer I Aktualisierung bleibt so, wie es da von dem Moment an in der Datenbank war, die findOne(id) aufgerufen wird, werden alle Attribute des Benutzerobjekts mit dem Benutzer überschrieben, so wie er sich in der Datenbank befindet.

Ich reparierte das Problem bereits durch Hinzufügen einer existsById(Long id) Funktion im Repository mit der Abfrage kommentiert "Match (n: User) wobei ID (n) = {0}".

Allerdings bin ich immer noch interessiert, warum SDN ein Objekt mit der gleichen ID wie ein Objekt überschreibt, das ich versuchte zu bekommen. Ich gehe davon aus, dass es Referenzen gibt, aber ich kann die Vorteile davon nicht wirklich sehen.

Antwort

2

Dies ist von Entwurf, wenn Sie eine Entität aus der Datenbank laden, ist es die neueste Version in der Grafik, so dass alle nicht gespeicherten Änderungen überschrieben werden.

Wenn Sie die Reihenfolge der Operationen ändern - zuerst laden, falls vorhanden, dann ändern und speichern - sollten Sie in Ordnung sein.

+0

Verstanden, danke! – Urr4

Verwandte Themen