首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当使用spring-data-ne4j时,删除节点也会删除关系,这与cypher默认值不同。

当使用spring-data-ne4j时,删除节点也会删除关系,这与cypher默认值不同。
EN

Stack Overflow用户
提问于 2014-11-10 10:47:11
回答 1查看 1.1K关注 0票数 2

我正在编写一个SpringData-ne4j应用程序,还在玩CRUD。

在密码中,如果我不能删除与另一个节点有关系的节点,而不首先删除该关系。

在春季数据中,新4j似乎没有相同的行为。当我删除一个节点时,它似乎也会删除相关的关系。

是否有办法防止这种行为发生在默认存储库中?如果对有关系的节点进行删除,如何获得spring数据来抛出异常?

这就是我所期望(和渴望)的行为:

代码语言:javascript
复制
@NodeEntity
class Junction {
    @GraphId Long id
}

@NodeEntity
class Route {
    @GraphId Long id
    @Fetch Junction from
    @Fetch Junction to
}

@Transactional
def "should not be able to delete a junction that is used"() {
    given: "a junction that is in use"
    Junction j = new Junction()
    Route r = new Route(from: j, to: new Junction())
    routeRepository.save(r)

    when: "the junction is removed"
    junctionRepository.delete(j)

    then:
    thrown SomeExceptionBecauseTheNodeHasAnAssociatedRelationship
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-11-11 09:22:40

我认为SDN存储库删除方法更类似于:

代码语言:javascript
复制
MATCH (j:Juntion)
OPTIONAL MATCH (j)-[r]-()
DELETE r, j

对我来说,这正是我想要的,但是如果您想要一种不同的行为,您可以在您的junctionRepository接口中覆盖删除方法,如下所示:

代码语言:javascript
复制
@Override
@Query("MATCH (j:Junction) WHERE ID(j)={0} DELETE j")
public void delete(Long id);

现在,如果您尝试删除一个具有关系的节点,您将在堆栈的某个地方得到一个ConstraintViolationException。这样做的缺点是,您必须记住对每个存储库都这样做,以鼓励您记住您可以在自己的接口中引入一个deleteSafe成语,并让每个存储库扩展它(我猜接口组合的缺点是仍然不能强制任何接口实际“实现”新方法)。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26841968

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档