У меня есть простая модель графа: User
имеет NSocialUser
.пружинные данные Neo4j удалить nodeEntity и все связанные узлы
Мне интересно, есть ли какой-либо путь через spring-data-neo4j
, чтобы автоматически удалить все ссылки SocialUser
, когда я удаляю объект User
.
Это то, что я получил до сих пор:
Домен:
@NodeEntity
public class User implements IdentifiableEntity<String> {
@GraphId
private Long nodeId;
// ...
@RelatedTo(type = "HAS", direction = Direction.OUTGOING)
Set<SocialUser> socialUsers = new HashSet<>();
}
@NodeEntity
public class SocialUser implements BasicNodeEntity {
@GraphId
private Long nodeId;
//...
@RelatedTo(type = "HAS", direction = Direction.INCOMING)
User user;
}
данных:
Что я пробовал:
- Удаление пользователя через GraphRepository
- Удаление пользователя через Neo4jTemplate
В обоих случаях, только User
удаляется:
На данный момент я инкапсулированные удаление обоих объектов в методе @Transactional
в службе User
. Что-то вроде этого:
@Autowired
Neo4jOperations template;
@Transactional
public void delete(String userId) throws Exception {
User user = get(userId);
if (user == null) throw new ResourceNotFoundException("user not found");
Set<SocialUser> socialUsers = template.fetch(user.getSocialUsers());
for (SocialUser socialUser : socialUsers) template.delete(socialUser);
userRepository.delete(user);
}
Но я думаю, что это, вероятно, не лучший способ достичь этого. Также я подумал, что было бы лучше сразу выполнить оператор Cypher
для удаления всех ссылочных узлов.
Любой может посоветовать мне, как с этим бороться? Любая помощь будет принята с благодарностью. Благодаря!
Я знаю, что это было некоторое время, но я нахожусь в том же самом месте. Вы придумали более чистое решение? – Ceekay
Привет @Ceekay. Пока нет, на данный момент я делаю то же самое, что и в своем вопросе. Если вы найдете лучший выбор, вы можете разместить авайер. Спасибо – troig
@Ceekay, Поработав над этим, я считаю, что лучший выбор - использовать запрос cypher. См. Мой ответ для получения дополнительной информации. Надеюсь, это поможет – troig