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