Spring Data Neo4j覆盖属性

时间:2016-04-05 09:39:23

标签: neo4j pass-by-reference spring-data-neo4j-4 neo4j-ogm

我尝试使用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的对象。我假设有参考,但我不能真正看到它的优点。

1 个答案:

答案 0 :(得分:2)

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

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