Spring数据Neo4j覆盖属性
我尝试编写一个服务,使用SDN4.0.0编写了一个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
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的对象。我假设其中包含引用,但我看不出它的优点。这是出于设计,当您从数据库加载实体时,它是图形中的最新版本,因此会覆盖所有未保存的更改
如果您更改操作顺序-首先加载,如果存在,然后修改并保存-您应该不会有问题。这是出于设计,当您从数据库加载实体时,它是图形中的最新版本,因此会覆盖所有未保存的更改 如果您更改了操作顺序—首先加载,如果存在,然后修改并保存—您应该可以