【问题标题】:Removing simple Relationships in Spring Data Neo4j删除 Spring Data Neo4j 中的简单关系
【发布时间】:2015-06-02 14:16:17
【问题描述】:

晚上好,

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

相关的Controller方法

@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”,只是为了测试目的,看看我是否可以让用户 A 与用户 B 的一个好友请求不被返回。

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

可迭代的 getUserFriendRequests(用户用户);

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

【问题讨论】:

    标签: java spring neo4j spring-data-neo4j


    【解决方案1】:

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

    template.deleteRelationshipBetween(Object start, Object end, String type)

    【讨论】:

    • 这就像一个魅力。我之前尝试过 template.deleteRelationshipBetween 方法,但它仍然失败。我必须确定我实际上是把参数放在正确的方向上。我的正确实现最终是:public void removeOldRequests(String friendId, User me){ User friend = userRepository.findByUserId(friendId); try{ template.deleteRelationshipBetween(friend, me, "HAS_FRIEND_REQUEST"); }catch(Exception e){ e.printStackTrace(); } } 再次感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-23
    • 1970-01-01
    相关资源
    最近更新 更多