spring 数据与 neo4j 有关:如何删除关系

spring data rest with neo4j: How to remove relationship

我正在尝试创建一个示例,说明如何使用 spring 数据休息服务删除 neo4j 上的关系。你可以用neo4j-movies-example来测试。

如果我得到关于人 1 的信息,我会看到一部电影

curl -s http://localhost:8080/persons/1
{
  "name" : "Keanu Reeves",
  "born" : 1964,
  "_links" : {
    "self" : {
      "href" : "http://localhost:8080/persons/1"
    },
    "person" : {
      "href" : "http://localhost:8080/persons/1"
    },
    "movies" : {
      "href" : "http://localhost:8080/persons/1/movies"
    }
  }
}

更改实体后仍然存在关系:

curl -s -X PUT -H "Content-Type:application/json" -d '{ "name" : "Keanu Reeves", "born":1964, "movies": [] }' http://localhost:8080/persons/1
{
  "name" : "Keanu Reeves",
  "born" : 1964,
  "_links" : {
    "self" : {
      "href" : "http://localhost:8080/persons/1"
    },
    "person" : {
      "href" : "http://localhost:8080/persons/1"
    },
    "movies" : {
      "href" : "http://localhost:8080/persons/1/movies"
    }
  }
}

curl -s -X DELETE http://localhost:8080/persons/1/movies都没有效果。那么如何删除 neo4j 与 spring-data-rest 的关系?

[更新 1] 我试图追踪它,但以这个结束 Issue -> 已修复,是 HashSet 和 HashCode-Method 的问题。

[更新 2] 创建了一个 example 表明 Neo4j-OGM 工作正常,但 Spring 数据造成了麻烦。 -> 已修复 - 问题是缺少 @Transactional,因此每次调用存储库时,都会创建一个新的事务和会话。对于更新,加载和保存必须在同一个事务中。

[更新3] 解决其他问题后,我能够理解问题所在。在 PATCH-Request 中,对象加载到与保存方法不同的会话中。行为如下,对象在会话 [412] 中加载,以预期方式操作对象,然后对象保存在会话 [417] 中。

在 Spring 启动 application.properties:

中有启用 OpenSessionInViewInterceptor 的设置
spring.data.neo4j.open-in-view=true

这仅适用于常规控制器,不适用于 Spring 数据 REST 资源。

您可以提供以下配置以启用 Spring Data REST 的拦截器(在任何 @Configuration class 中):

@Bean
public OpenSessionInViewInterceptor openSessionInViewInterceptor() {
    return new OpenSessionInViewInterceptor();
}

@Bean
public MappedInterceptor myMappedInterceptor() {
    return new MappedInterceptor(new String[]{"/**"}, openSessionInViewInterceptor());
}