Spring数据Neo4j覆盖属性

Spring数据Neo4j覆盖属性,neo4j,pass-by-reference,spring-data-neo4j-4,neo4j-ogm,Neo4j,Pass By Reference,Spring Data Neo4j 4,Neo4j Ogm,我尝试编写一个服务,使用SDN4.0.0编写了一个update(User)函数。 函数应该看起来,如果数据库中有一个用户具有相同的id,如果是,则用新用户覆盖该用户 有一个UserRepository扩展了graphrespository我编写了以下代码: User updateUser(User user){ if(userRepository.findOne(user.getId())!=null){ user = userRepository.save(user); r

我尝试编写一个服务,使用SDN4.0.0编写了一个
update(User)
函数。 函数应该看起来,如果数据库中有一个用户具有相同的id,如果是,则用新用户覆盖该用户

有一个
UserRepository
扩展了
graphrespository
我编写了以下代码:

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(n:User)where id(n)={0}”


然而,我仍然感兴趣的是,为什么SDN会覆盖与我试图获取的对象具有相同id的对象。我假设其中包含引用,但我看不出它的优点。

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


如果您更改操作顺序-首先加载,如果存在,然后修改并保存-您应该不会有问题。

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

如果您更改了操作顺序—首先加载,如果存在,然后修改并保存—您应该可以