2015-06-02 52 views
1

晚上好,拆卸簡單的關係在春季數據的Neo4j

我使用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」的指導將不勝感激。要麼是,要麼是更好的方式來處理「朋友請求握手」的想法。如果您對我有任何疑問或疑慮,請不要猶豫,以引起他們的注意。

回答

1

您可以從集合 中刪除目標用戶或使用Neo4jTemplate方法刪除關係。

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

+0

這就像一個魅力。我以前試過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 }' 再次感謝您的幫助! –