Java 删除Spring数据Neo4j中的简单关系

Java 删除Spring数据Neo4j中的简单关系,java,spring,neo4j,spring-data-neo4j,Java,Spring,Neo4j,Spring Data Neo4j,晚上好, 我正在使用SDN3,在删除基础图中的简单关系(RelateTo)时遇到了问题。这个场景是,我想在我的web应用程序中的用户之间建立一个朋友请求/批准系统。通过在用户之间创建“HAS_request”关系,我可以发出请求。但是,一旦收到好友请求的用户点击“批准”,就会建立“好友与”关系,而不会正确删除“已请求”关系。下面的代码介绍了整个过程: 相关控制器方法 @RequestMapping(value="/approve/friend/{friendId}") public String

晚上好,

我正在使用SDN3,在删除基础图中的简单关系(RelateTo)时遇到了问题。这个场景是,我想在我的web应用程序中的用户之间建立一个朋友请求/批准系统。通过在用户之间创建“HAS_request”关系,我可以发出请求。但是,一旦收到好友请求的用户点击“批准”,就会建立“好友与”关系,而不会正确删除“已请求”关系。下面的代码介绍了整个过程:

相关控制器方法

@RequestMapping(value="/approve/friend/{friendId}")
public String approveFriend(@PathVariable("friendId") String friendId){
    User me = userService.findByEmail(userService.getAuthenticatedUser().getName());
    userService.removeOldRequests(friendId, me);
    userService.approveFriendship(friendId, me);
    return "redirect:/friends";
}
正在讨论的UserService方法。”“我”是最初向“friendId/friend”发送好友请求的经过身份验证的用户:

public void removeOldRequests(String friendId, User me){
try{
    User friend = userRepository.findByUserId(friendId);
    friend.addStartNodeForUsersRequestingMe(me, false);
    template.save(friend);
}catch(Exception e){
    e.printStackTrace();
}
这是我的用户实体节点(不包括不相关的字段/getter/setter)

公共类用户{

@GraphId Long nodeId;
@Indexed
String userId;
String username;
String firstName;
String lastName;
String email;
String aboutMe;
String Quote;
String favoriteBook;
int age;
Date userCreation;
String sex;
String password;
Role role;
byte[] picture;


@RelatedTo(type="FRIENDS_WITH", direction=Direction.BOTH)
@Fetch
Set<User> friends;


@RelatedTo(type="HAS_FRIEND_REQUEST")
@Fetch
Set<User> startNodeForUsersRequestingMe;

@RelatedTo(type="HAS_FRIEND_REQUEST", direction=Direction.INCOMING)
@Fetch
Set<User> UsersWhoHaveRequestedMe;


public void addStartNodeForUsersRequestingMe(User user, boolean flag){
    if(flag){
        this.startNodeForUsersRequestingMe.add(user);
    }else{
        this.startNodeForUsersRequestingMe.remove(user);
    }

}
public void addUsersWhoHaveRequestedMe(User user, boolean flag){
    if(flag){
        this.UsersWhoHaveRequestedMe.add(user);
    }else{
        this.UsersWhoHaveRequestedMe.remove(user);
    }

}
Iterable getUserFriendRequests(用户)


任何关于如何以干净的方式正确删除“HAS_FRIEND_请求”的指导都将不胜感激。或者是这样,或者是处理“FRIEND REQUEST Handshake”的更好方法想法。如果您对我有任何问题或顾虑,请随时提醒我。

您可以从收藏中删除目标用户 或者使用Neo4jTemplate方法删除关系


template.DeleteRelationsBetween(对象开始、对象结束、字符串类型)

这很有效。我以前尝试过template.DeleteRelationsInterween方法,但仍然失败。我必须确保我确实将参数放在了正确的方向上。我的正确实现是:
public void removeOldRequests(String friendId,User me){User friend=userRepository.findByUserId(friendId);尝试{template.deleteRelationsInterween(friend,me,“HAS_friend_REQUEST”)}捕获(异常e){e.printStackTrace();}
再次感谢您的帮助!
@GraphId Long nodeId;
@Indexed
String userId;
String username;
String firstName;
String lastName;
String email;
String aboutMe;
String Quote;
String favoriteBook;
int age;
Date userCreation;
String sex;
String password;
Role role;
byte[] picture;


@RelatedTo(type="FRIENDS_WITH", direction=Direction.BOTH)
@Fetch
Set<User> friends;


@RelatedTo(type="HAS_FRIEND_REQUEST")
@Fetch
Set<User> startNodeForUsersRequestingMe;

@RelatedTo(type="HAS_FRIEND_REQUEST", direction=Direction.INCOMING)
@Fetch
Set<User> UsersWhoHaveRequestedMe;


public void addStartNodeForUsersRequestingMe(User user, boolean flag){
    if(flag){
        this.startNodeForUsersRequestingMe.add(user);
    }else{
        this.startNodeForUsersRequestingMe.remove(user);
    }

}
public void addUsersWhoHaveRequestedMe(User user, boolean flag){
    if(flag){
        this.UsersWhoHaveRequestedMe.add(user);
    }else{
        this.UsersWhoHaveRequestedMe.remove(user);
    }

}
@Query("START user=node({0})"
    +"MATCH (user)-[:HAS_FRIEND_REQUEST]-(friend)"
    + "return friend;")