911 Stimmen

Behebung des Hibernate-Fehlers "Objekt verweist auf eine nicht gespeicherte transiente Instanz - speichern Sie die transiente Instanz vor dem Flushen".

Ich erhalte folgenden Fehler, wenn ich das Objekt mit Hibernate speichere

object references an unsaved transient instance - save the transient instance before flushing

0voto

shashigura Punkte 133

Ein einfacher Weg, dieses Problem zu lösen, ist das Speichern beider Entitäten. Speichern Sie zuerst die untergeordnete Entität und dann die übergeordnete Entität. Denn die übergeordnete Entität ist für den Fremdschlüsselwert von der untergeordneten Entität abhängig.

Nachfolgend eine einfache Prüfung der Eins-zu-eins-Beziehung

insert into Department (name, numOfemp, Depno) values (?, ?, ?)
Hibernate: insert into Employee (SSN, dep_Depno, firstName, lastName, middleName, empno) values (?, ?, ?, ?, ?, ?)

Session session=sf.openSession();
        session.beginTransaction();
        session.save(dep);
        session.save(emp);

0voto

Igor Punkte 410

In meinem Fall wurde durch die Verwendung von Cascade.ALL ein unnötiger Eintrag in die Tabelle eingefügt, die bereits dasselbe Objekt enthielt (das Erzeugen eines untergeordneten Werts ohne eine ID bewirkt genau das). Ich müsste also zunächst ein untergeordnetes Objekt aus dem Repository abrufen und es in das Hauptobjekt einfügen, anstatt das Objekt, das das Problem verursacht.

Student s = studentRepo.findByName(generatedObject.getStudent().getName())
generatedObject.student(s);

0voto

Bilal Ahmad Punkte 483

Machen Sie einfach den Konstruktor Ihres Mappings in Ihrer Basisklasse. Wenn Sie z.B. eine Eins-zu-Eins-Beziehung zwischen Entität A und Entität B wünschen. wenn Sie A als Basisklasse nehmen, dann muss A einen Konstruktor mit B als Argument haben.

0voto

NikNik Punkte 2095

Mein Problem bezog sich auf @BeforeEach von JUnit. Und selbst wenn ich die zugehörigen Entitäten gespeichert habe (in meinem Fall @ManyToOne ), erhielt ich die gleiche Fehlermeldung.

Das Problem hängt irgendwie mit der Sequenz zusammen, die ich in meinem Elternteil habe. Wenn ich den Wert diesem Attribut zuweise, ist das Problem gelöst.

Bsp. Wenn ich die Entität Frage habe, die einige Kategorien haben kann (eine oder mehrere) und die Entität Frage eine Sequenz hat:

@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "feedbackSeq")
@Id
private Long id;

Ich muss den Wert zuweisen question.setId(1L);

0voto

Tadele Ayelegn Punkte 3711

Ich sah mich mit dieser Ausnahme konfrontiert, als ich das übergeordnete Objekt nicht persistierte, sondern das untergeordnete Objekt speicherte. Um das Problem zu lösen, habe ich in derselben Sitzung sowohl das untergeordnete als auch das übergeordnete Objekt beibehalten und CascadeType.ALL für das übergeordnete Objekt verwendet.

CodeJaeger.com

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.

Powered by:

X