我正在将我的 Spring Data Neo4j 从版本 5.1.8 升级到 6.2.3,我注意到保存方法有显着差异。
在 5.x 版本中,我可以使用 save 方法仅修改我想更改的根节点中的关系,并通过将其设置为“null”来忽略其他关系。其他关系保存后不受影响
例如,我有一些实体和关系。我可以将 rootNode 传递给 save() 并将关系“属性”设置为“空”,但只包括关系“选项”的更改。在这种情况下,“选项”将被更新,而“属性”将不被删除。
@Node
prublic class RootNode{
@Id @GeneratedValue
private Long id;
private String value;
@Relationship(type="CONTAIN_PROPERTY")
private List<Property> properties;
@Relationship(type="CONTAIN_OPTION")
private List<Option> options;
....
}
@Node
prublic class Property{
@Id @GeneratedValue
private Long id;
private String value;
private String name;
....
}
@Node
prublic class Option{
@Id @GeneratedValue
private Long id;
private String value;
....
}
然而,在6.x版本中,我必须在调用save时传递完整数据,这意味着我必须使用findById之类的方法来检索具有此关系的完整数据并根据根对象进行更改。如果我通过将其设置为“空”来忽略这些属性,它们将在保存后被删除。
这是否意味着检索完整数据以进行更新操作是我升级的必要步骤?或者在 6.x 版本中是否有其他方法可以获得与旧版本相同的结果? (当然,自己写静态Cypher更新除外)
我试过在Spring Data Neo4j 5.x和6.x中执行下面的方法,但是结果不一样
@Service
public class MyService{
@Autowired
private RootNodeRepository repository;
public void update(RootNode rootNode){
...
rootNode.setProperties(null);
repository.save(rootNode);
...
...
RootNode rootNode = repository.findById(rootNode.getId());
// In version 5.x, the properties still exist, but in version 6.x, they are deleted.
...
}
}
我从这个答案中找到了一些描述,https://stackoverflow.com/questions/65219036/how-should-one-migrate-from-the-removed-depth-annotation-in-spring-data-neo4j-6。 不知道是不是和我的问题有关