У меня есть следующий двунаправленные 1: п отношение между лицом пользователя и работой лицом:JPA сохраняется объект с cascase отношением, а затем удалить его (спящий режим)
Класс пользователя:
...
@OneToMany(mappedBy = "user",cascade={CascadeType.PERSIST})
public Collection<Job> getJobs() {
return jobs;
}
public void addJob(Job j) {
jobs.add(j);
j.setUser(this);
}
...
класса Работой :
// Job class
...
@ManyToOne
public User getUser() {
return user;
}
Теперь сохранение объекта пользователя (и пусть спящий режим автоматически сохранить объект задания) работает ... Затем, когда я хочу, чтобы удалить объект задания из БД я получаю п исключение ....
User user = new User();
user.addJob(new Job());
entityManager.getTransaction().begin();
entityManager.persist(user);
entityManager.getTransaction().commit();
Job j = entityManager.find(Job.class, 1L);
entityManager.getTransaction().begin();
entityManager.remove(j);
entityManager.getTransaction().commit();
Исключение:
Exception in thread "main" javax.persistence.RollbackException: Error while committing the transaction
Caused by: javax.persistence.EntityNotFoundException: deleted entity passed to persist: [dst1.model.Job#<null>]
почему это происходит? Кстати. когда я явно вызвать упорствовать с работой объекта проблема не возникает ... но я не хочу упорствовать работу отдельно, но пусть спящий режим сохраняется их (с каскадом, который на самом деле работает ....)
ТНХ
У меня может быть идея, но я не уверен. не могли бы вы добавить 'entityManager.flush()' после первого коммита и сказать, что произойдет тогда. моя идея в том, что это зависит от вашей стратегии смывания ... – kraftan
Привет, и спасибо за ваш ответ. Добавление entityManager.flush() не решает проблему. :/ – Moonlit