我尝试使用SDN 4.0.0编写一个具有update(User)
功能的服务。
该函数应该看起来,数据库中有一个具有相同id的User,如果是,则用新的用户覆盖该用户。
有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)
被调用,用户对象的所有属性都被用户覆盖,因为它是在数据库中。
我已经通过在使用Query “Match(n:User),其中ID(n)= {0}”注释的存储库中添加existsById(Long id)
函数来解决问题。
但是,我仍然感兴趣,为什么SDN会覆盖与我试图得到的对象具有相同ID的对象。我假设有参考,但我不能真正看到它的优点。
答案 0 :(得分:2)
这是设计上的,当您从数据库加载实体时,它是图表中的最新版本,因此会覆盖任何未保存的更改。
如果您更改操作顺序 - 首先加载,如果存在,则修改并保存 - 您应该没问题。