删除Spring Data Neo4j中的简单关系

时间:2015-06-02 14:16:18

标签: java spring neo4j spring-data-neo4j

晚安,

我正在使用SDN 3,并且遇到了在基础图中删除简单关系(RelateTo)的问题。场景是我想在我的Web应用程序中的用户之间建立一个朋友请求/批准系统。通过在用户之间创建“HAS_REQUESTED”关系来发出请求没有问题。但是一旦收到好友请求的用户点击“批准”,就建立了“FRIENDS_WITH”关系而没有正确删除“HAS_REQUESTED”关系。下面的代码介绍了整个过程:

相关的控制器方法

@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方法。 'me'是最初将好友请求发送给'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。)

@NodeEntity

公共类用户{

@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);
    }

}

我用来返回当前用户的好友请求的存储库方法如下。现在,它被配置为仅返回用户具有“HAS_FRIEND_REQUEST”的任何关系,仅用于测试目的,以查看我是否可以从用户B获得一个朋友请求而不返回用户A.

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

Iterable getUserFriendRequests(用户用户);

有关如何以干净的方式正确删除“HAS_FRIEND_REQUEST”的任何指导将不胜感激。无论是那个,还是更好的方式来处理“朋友请求握手”的想法。如果您对我有任何问题或疑虑,请随时提请我注意。

1 个答案:

答案 0 :(得分:1)

您可以从集合中删除目标用户 或使用Neo4jTemplate方法删除关系。

MarkerOptions mMarkerOptions = new MarkerOptions(); mMarkerOptions.position(new LatLng(lat, lang)); mMarkerOptions.anchor(0.5f, 0.5f);