Spring Data Neo4j 5.x 和 6.x 之间的“保存”方法有什么区别?

问题描述 投票:0回答:0

我正在将我的 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。 不知道是不是和我的问题有关

neo4j spring-data-neo4j
© www.soinside.com 2019 - 2024. All rights reserved.