我使用SDN 3,和正在運行與我在下面的圖中移除的簡單關係(RelateTo)的問題。該方案是我想在我的Web應用程序中的用戶之間建立Friend請求/批准系統。通過在用戶之間創建「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。 「我」是誰最初發送好友請求「friendId /朋友的身份驗證的用戶:(不包括不相關的領域/ getter/setter方法)
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();
}
,這裏是我的用戶實體節點
@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(User user);
任何有關如何以一種乾淨的方式正確刪除「HAS_FRIEND_REQUEST」的指導將不勝感激。要麼是,要麼是更好的方式來處理「朋友請求握手」的想法。如果您對我有任何疑問或疑慮,請不要猶豫,以引起他們的注意。
這就像一個魅力。我以前試過template.deleteRelationshipBetween方法,它繼續失敗。我必須確定我確實將參數放在正確的方向上。 我的正確執行結束了: '公共無效removeOldRequests(字符串friendId,用戶ME){ \t用戶朋友= userRepository.findByUserId(friendId); \t嘗試{ \t \t template.deleteRelationshipBetween(friend,me,「HAS_FRIEND_REQUEST」); (例外e){ \t} catch(Exception e){ \t \t e.printStackTrace(); \t} \t }' 再次感謝您的幫助! –