我有一個簡單的圖形模式: User
具有ñSocialUser
。彈簧數據的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
被刪除:
目前我已經封裝在User
服務中的@Transactional
方法中刪除兩個實體。就像這樣:
@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
Hi @Ceekay。現在還沒有,我現在正在以我發問的相同方式進行操作。如果你找到更好的選擇,你可以發佈一個aswer。謝謝 – troig
@Ceekay,經過一段時間的工作,我認爲最好的選擇是使用密碼查詢。查看我的答案以獲取更多信息。希望它有幫助 – troig