【问题标题】:spring-data-neo4j remove nodeEntity and all referenced nodesspring-data-neo4j 删除 nodeEntity 和所有引用的节点
【发布时间】:2015-07-19 18:00:10
【问题描述】:

我有一个简单的图模型:1 UserN SocialUser

我想知道当我删除 User 实体时,是否有任何方法可以通过 spring-data-neo4j 自动删除所有引用的 SocialUser

这是我目前得到的:

域:

@NodeEntity
public class User implements IdentifiableEntity<String> {

   @GraphId
   private Long nodeId;
   // ...

   @RelatedTo(type = "HAS", direction = Direction.OUTGOING)
   Set<SocialUser> socialUsers = new HashSet<>();
}

@NodeEntity
public class SocialUser implements BasicNodeEntity {

   @GraphId
   private Long nodeId;
   //...

   @RelatedTo(type = "HAS", direction = Direction.INCOMING)
   User user;
}

数据

我的尝试:

在这两种情况下,只有User 被删除:

目前,我已将两个实体的删除封装在User 服务中的@Transactional 方法中。像这样的:

   @Autowired
   Neo4jOperations template;

   @Transactional
   public void delete(String userId) throws Exception {
      User user = get(userId);
      if (user == null) throw new ResourceNotFoundException("user not found");
      Set<SocialUser> socialUsers = template.fetch(user.getSocialUsers());
      for (SocialUser socialUser : socialUsers) template.delete(socialUser);
      userRepository.delete(user);
   }

但我认为这可能不是实现它的最佳方式。另外我认为最好直接执行Cypher 语句来删除所有引用的节点..

谁能告诉我如何处理这个问题?任何帮助将不胜感激。谢谢!

【问题讨论】:

  • 我知道已经有一段时间了,但我在同一个地方。你想出了更清洁的解决方案吗?
  • 嗨@Ceekay。还没有,目前我正在以与我在问题中发布的方式相同的方式进行操作。如果您找到更好的选择,您可以发布一个回答。谢谢
  • @Ceekay,经过一段时间的研究,我认为最好的选择是使用密码查询。有关更多信息,请参阅我的答案。希望对你有帮助

标签: java neo4j cypher spring-data spring-data-neo4j


【解决方案1】:

我知道这已经有一段时间了,但是在与 SDNneo4j 合作了一段时间之后,似乎完成此任务的最佳方法是使用 Cypher 查询。

MATCH (user:User{id:'userId'})-[has:HAS]->(socialUser:SocialUser)
DELETE user, has, socialUser

借助 SDN,我们可以利用存储库:

@Repository
public interface UserRepository extends Neo4jRepository<User> {

    @Query("MATCH (user:User{id:{id}})-[has:HAS]->(socialUser:SocialUser) DELETE user, has, socialUser")
    void delete(String id);
}

希望对他人有所帮助

【讨论】:

  • 您应该将此标记为答案,我认为这是解决此问题的一种干净方法。
  • 完成!谢谢@Ceekay
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-24
  • 2018-08-30
  • 2013-09-23
  • 2013-06-08
  • 2015-04-18
相关资源
最近更新 更多