у вас есть ограничение внешнего ключа follower_id, которое гарантирует, что вы не можете удалить пользователя, на который ссылаются уведомления. Вам нужно установить нулевой идентификатор пользователя, на который ссылаются, для всех уведомлений для данного пользователя на многих сторонах перед удалением пользователя.
i) remove orphanRemoval = true, а также CascadeType.ALL (CascadeType.ALL, который включает REMOVE) указывает, что операции удаления должны автоматически каскадно обращаться к объектам сущности, на которые ссылается это поле (на несколько объектов сущности может ссылаться поле сбора)) в User
@OneToMany(mappedBy = "user")
private List<Notification> notifications
;
ii), а также добавьте nullable = true
для пользователя в FollowNotification
, т. е.
@JoinColumn(name = "id",nullable = true)
private User user;
iii) Теперь код для удаления пользователя будет выглядеть примерно так
public void deleteUser(int id) {
// code to get entity manager and then
Query query = entitymanager.createQuery("Select u " + "from User u " + "where u.userId=+id");
User user=query.getResultList( ).get(0);
Set notifications= user.getNotification();
Iterator<Notification> noteIterator = notifications.iterator();
while (notification.hasNext()){
Notification notification= noteIterator.next();
notification.setUser(null);
}
entitymanager.remove(user);
}