2015-06-02 2 views
1

Добрый вечер,Удаление простых Отношения в Spring Data Neo4j

Я использую SDN 3, и я бегу в проблемы с удалением простых отношений (RelateTo) в моей основной графике. Сценарий заключается в том, что я хочу установить систему запроса/одобрения друга среди пользователей в моем веб-приложении. У меня нет проблем с выдачей запроса, создав связь «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/друга»: (. За исключением несвязанных поля/добытчиками/сеттеры)

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(); 
} 

и вот моя сущность Пользователь Node

@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», только для целей тестирования, чтобы узнать, могу ли я получить User A с одним запросом друга от пользователя B, чтобы НЕ возвращаться.

@Query("START user=node({0})" 
    +"MATCH (user)-[:HAS_FRIEND_REQUEST]-(friend)" 
    + "return friend;") 

Iterable getUserFriendRequests (Пользователь пользователя);

Любое руководство по правильному удалению «HAS_FRIEND_REQUEST» в чистом виде было бы весьма полезным. либо это, либо, может быть, лучший способ справиться с идеей «Друг-запрос рукопожатия». Если у вас есть какие-либо вопросы или опасения для меня, пожалуйста, не стесняйтесь привлечь их к моему вниманию.

ответ

1

Вы можете удалить целевого пользователя из коллекции или использовать метод Neo4jTemplate для удаления отношений.

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

+0

Это работало как очарование. Я ранее пробовал метод template.deleteRelationshipBetween, и он продолжал сбой. Я должен был быть уверен, что на самом деле я поставил параметры в правильном направлении. моя правильная реализация в конечном итоге являются: 'общественные пустоты removeOldRequests (String friendId, Пользователь меня) { друг \t пользователя = userRepository.findByUserId (friendId); \t try { \t \t template.deleteRelationshipBetween (друг, я, "HAS_FRIEND_REQUEST"); \t} catch (исключение e) { e.printStackTrace(); \t} \t } ' Еще раз спасибо за помощь! –

Смежные вопросы