2016-04-05 3 views
0

Я попытался написать службу, имея функцию update(User) с использованием SDN 4.0.0. Функция должна выглядеть, в ней есть Пользователь в базе данных с тем же идентификатором, и если да, перезапишите этого пользователя новым.Spring Data Neo4j перезаписывает атрибуты

Имея в UserRepository, который расширяет GraphRepository<User> я написал следующий код:

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

теперь у меня есть проблема, что каждое обновление пользователя Я остается, как это было в базе данных, так как с момента, то findOne(id) , все атрибуты пользовательского объекта будут перезаписаны пользователем, как и в базе данных.

Я уже установил проблему, путем добавления existsById(Long id) функцию в хранилище аннотированного с запросом «Match (п: Пользователь), где идентификатор (п) = {0}».

Однако меня все еще интересует, почему SDN перезаписывает объект с тем же идентификатором, что и объект, который я пытался получить. Я предполагаю, что есть ссылки, но я не могу увидеть преимущества этого.

ответ

2

Это по дизайну, что при загрузке объекта из базы данных это самая последняя версия на графике, тем самым перезаписывая любые несохраненные изменения.

Если вы изменили порядок операций - сначала загрузите, если он существует, затем измените и сохраните - все должно быть хорошо.

+0

Понял, спасибо! – Urr4

Смежные вопросы