【发布时间】: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