Massa, obrigado pela ajuda! Seguindo o seu exemplo, pensei em utilizar um listener na classe user, para que todas as classes associadas à ele sejam deletadas antes de sua exclusão. Ficaria mais ou menos assim:
@EntityListeners(UserListener.class)
@SQLDelete("UPDATE User SET deleted = TRUE WHERE id = ?")
@Where(clause = "deleted = FALSE")
public class User {
@OneToMany(mappedBy = "user", fetch = EAGER, cascade=ALL, orphanRemoval = true)
private List usernotes;
}
public class UserListener {
@PreRemove
private void beforeDelete(User user) {
noteRepo.deleteByUserId(user.getId());
}
}
Assim, o método de deletar um usuário não fica poluído com vários repositórios ou serviços sendo chamados