Добрый вечер,Удаление простых Отношения в 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» в чистом виде было бы весьма полезным. либо это, либо, может быть, лучший способ справиться с идеей «Друг-запрос рукопожатия». Если у вас есть какие-либо вопросы или опасения для меня, пожалуйста, не стесняйтесь привлечь их к моему вниманию.
Это работало как очарование. Я ранее пробовал метод 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 } ' Еще раз спасибо за помощь! –