Ich erhalte folgenden Fehler, wenn ich das Objekt mit Hibernate speichere
object references an unsaved transient instance - save the transient instance before flushing
Ich erhalte folgenden Fehler, wenn ich das Objekt mit Hibernate speichere
object references an unsaved transient instance - save the transient instance before flushing
Es kann auch passieren, wenn Sie eine OneToMany-Beziehung haben und versuchen, die untergeordnete Entität zur Liste der übergeordneten Entität hinzuzufügen. abrufen. diese Liste durch die übergeordnete Entität (vor dem Speichern dieser übergeordneten Entität), ohne Speicherung der untergeordneten Entität selbst, z.B.:
Child childEntity = new Child();
parentEntity.addChild(childEntity);
parentEntity.getChildren(); // I needed the retrieval for logging, but one may need it for other reasons.
parentRepository.save(parentEntity);
Der Fehler wurde ausgelöst, als ich die übergeordnete Entität gespeichert habe. Wenn ich den Abruf in der vorherigen Zeile entfernt habe, wurde der Fehler nicht ausgelöst, aber das ist natürlich nicht die Lösung.
Le site Lösung die ChildEntity gespeichert hat und Hinzufügen von dass gespeicherte untergeordnete Entität an die übergeordnete Entität, etwa so:
Child childEntity = new Child();
Child savedChildEntity = childRepository.save(childEntity);
parentEntity.addChild(savedChildEntity);
parentEntity.getChildren();
parentRepository.save(parentEntity);
Dieses Problem trat bei mir auf, als ich eine neue Entität und eine zugehörige Entität in einer Methode erstellte, die als @Transactional
und führte dann vor dem Speichern eine Abfrage durch. Bsp.
@Transactional
public someService() {
Entity someEntity = new Entity();
AssocaiatedEntity associatedEntity = new AssocaitedEntity();
someEntity.setAssociatedEntity(associatedEntity);
associatedEntity.setEntity(someEntity);
// Performing any query was causing hibernate to attempt to persist the new entity. It would then throw an exception
someDao.getSomething();
entityDao.create(someEntity);
}
Um dies zu beheben, habe ich die Abfrage vor der Erstellung der neuen Entität durchgeführt.
Um meine 2 Cents hinzuzufügen, ich habe das gleiche Problem, wenn ich versehentlich senden null
als die ID. Der nachstehende Code zeigt mein Szenario (und der Auftraggeber hat kein bestimmtes Szenario erwähnt) .
Employee emp = new Employee();
emp.setDept(new Dept(deptId)); // --> when deptId PKID is null, same error will be thrown
// calls to other setters...
em.persist(emp);
Hier bin ich Einstellung der vorhandenen Abteilung id zu einem neuen Mitarbeiter Instanz ohne tatsächlich die Abteilung Entität zuerst, wie ich nicht eine weitere Select-Abfrage zu feuern wollen.
In einigen Szenarien, deptId
PKID kommt als null
von der aufrufenden Methode und ich m erhalten den gleichen Fehler.
Also, achten Sie auf null
Werte für PK ID
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.