Ich habe folgende bidirektionale 1: n-Beziehung zwischen einem Benutzer Einheit und eine Job Einheit:JPA besteht Objekt mit cascase Beziehung und dann löscht (Hibernate)
Benutzerklasse:
...
@OneToMany(mappedBy = "user",cascade={CascadeType.PERSIST})
public Collection<Job> getJobs() {
return jobs;
}
public void addJob(Job j) {
jobs.add(j);
j.setUser(this);
}
...
Jobklasse :
// Job class
...
@ManyToOne
public User getUser() {
return user;
}
nun ein User-Objekt (und lassen Sie den Ruhezustand automatisch den Job Einheit speichern) speichern funktioniert ... Dann, wenn ich den Job Entität aus der db i a erhalten löschen möchten n Ausnahme ....
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();
Ausnahme:
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>]
warum geschieht dies? übrigens. Wenn ich explizit anrufe mit dem Job-Objekt das Problem tritt nicht auf ... aber ich möchte Job nicht getrennt persistieren, aber Ruhe bewahren sie (mit Kaskade, die tatsächlich funktioniert ....)
thx
Ich habe vielleicht eine Idee, aber ich bin mir nicht sicher. Könnten Sie bitte 'entityManager.flush()' nach dem ersten Commit hinzufügen und mir sagen, was dann passiert. Meine Idee ist, dass es auf deine Spülstrategie ankommt ... – kraftan
Hallo, und danke für deine Antwort. Das Hinzufügen von entityManager.flush() löst das Problem nicht. :/ – Moonlit