我正在编写一个SpringData-ne4j应用程序,还在玩CRUD。
在密码中,如果我不能删除与另一个节点有关系的节点,而不首先删除该关系。
在春季数据中,新4j似乎没有相同的行为。当我删除一个节点时,它似乎也会删除相关的关系。
是否有办法防止这种行为发生在默认存储库中?如果对有关系的节点进行删除,如何获得spring数据来抛出异常?
这就是我所期望(和渴望)的行为:
@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
}发布于 2014-11-11 09:22:40
我认为SDN存储库删除方法更类似于:
MATCH (j:Juntion)
OPTIONAL MATCH (j)-[r]-()
DELETE r, j对我来说,这正是我想要的,但是如果您想要一种不同的行为,您可以在您的junctionRepository接口中覆盖删除方法,如下所示:
@Override
@Query("MATCH (j:Junction) WHERE ID(j)={0} DELETE j")
public void delete(Long id);现在,如果您尝试删除一个具有关系的节点,您将在堆栈的某个地方得到一个ConstraintViolationException。这样做的缺点是,您必须记住对每个存储库都这样做,以鼓励您记住您可以在自己的接口中引入一个deleteSafe成语,并让每个存储库扩展它(我猜接口组合的缺点是仍然不能强制任何接口实际“实现”新方法)。
https://stackoverflow.com/questions/26841968
复制相似问题