2016-04-05 125 views
0

我试着编写一个服务,使用SDN 4.0.0的update(User)函数。 函数应该看起来,它有一个用户在数据库中具有相同的ID,如果是的话,用新的覆盖这个用户。Spring Data Neo4j覆盖属性

具有延伸GraphRepository<User>我写了下面的代码UserRepository

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)功能查询“匹配(N:用户),其中ID(N)= {0}”

但是,我仍然感兴趣,为什么SDN覆盖与我试图获得的对象具有相同ID的对象。我假设有涉及的参考,但我不能真正看到它的优点。

回答

2

这是通过设计,当您从数据库加载实体时,它是图中最新版本,因此会覆盖所有未保存的更改。

如果您更改操作的顺序 - 首先加载,如果存在,则修改并保存 - 您应该没问题。

+0

了解,谢谢! – Urr4