晚安,
我正在使用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”的任何指导将不胜感激。无论是那个,还是更好的方式来处理“朋友请求握手”的想法。如果您对我有任何问题或疑虑,请随时提请我注意。
答案 0 :(得分:1)
您可以从集合中删除目标用户 或使用Neo4jTemplate方法删除关系。
MarkerOptions mMarkerOptions = new MarkerOptions();
mMarkerOptions.position(new LatLng(lat, lang));
mMarkerOptions.anchor(0.5f, 0.5f);