Spring 数据 Neo4j 覆盖属性

Spring Data Neo4j overwrites attributes

我尝试编写一个服务,使用 SDN 4.0.0 具有 update(User) 功能。 该函数应该看起来,如果数据库中有一个具有相同 ID 的用户,如果有,则用新用户覆盖该用户。

有一个扩展 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) 函数并用查询 "Match (n:User) where ID(n)={0}".

注释

但是,我仍然很感兴趣,为什么 SDN 会覆盖与我试图获取的对象具有相同 ID 的对象。我假设有参考文献,但我真的看不出它的优点。

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

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