2014-01-30 5 views
14

Wenn eine Criteria Abfrage in Hibernate ausgeführt wird, erhalte ich die folgende Ausnahme:javax.persistence.PersistenceException: org.hibernate.type.SerializationException: konnte nicht deserialisieren

javax.persistence.PersistenceException: javax.persistence.PersistenceException: org.hibernate.type.SerializationException: could not deserialize: could not deserialize 

Was könnte das Problem sein?

PS: obwohl möglicherweise nicht relevant, meine Hibernate-Version ist Hibernate-4.0.1 final.

Antwort

24

Das Problem war, dass eine referenzierte Entität einen anderen Verweis auf eine Entität hatte und die Beziehung von keiner der @OneToMany-ähnlichen Anmerkungen kommentiert wurde.

+0

WOW, was für ein Timing! Ich verbrachte die letzten 2 Tage damit, das Gleiche herauszufinden. Ich hatte eine Abteilung Entität, die ein OneToOne und JoinColumn für ein Manager-Attribut zu einem Employee Entity hatte, das auch ein Attribut Department hatte. Nachdem ich Ihre Antwort gesehen hatte (am selben Tag wie mein Problem), wurde mir klar, dass meine Mitarbeiter-Entität nicht über das entsprechende OneToMany-Attribut verfügte. Vielen Dank!! – jeff

+0

Ich bin wirklich froh, dass ich helfen kann :) –

+4

Leider habe ich dieses Problem auch ... irgendwo in ~ 100 Entity-Klassen mit 7500+ Zeilen Code. Die Ausnahme ist im Grunde genommen nicht hilfreich. =/ –

-2

Ich habe meine Entity-Klasse UploadFiles mit zwei Felder als fid & Fname wo Fid als Primärschlüssel. Ich habe meine Abfrage in dao als

StringBuilder queryString = new StringBuilder("from UploadFiles f where f.fid=1"); 

Query query = (Query) session.createQuery(queryString.toString());   
return query.list(); 

wenn es query.list() ausführen, gibt es Serialisierung Ausnahme

+0

Das ähnelt Frage, fügen Sie Erklärung hinzu und es wird gültige Antwort sein. –

7

Diese Ausnahme kann auftreten, wenn Hibernate Daten von unerwarteten Art von Datenbank-Abfrageergebnis erhält. Zum Beispiel erwartet Hibernate Zahl, aber stattdessen String.

In diesem Fall nach StreamCorruptedException: "invalid stream header": 74657374 Ausnahme in Stacktrace suchen. Die Zahl ist ein Hinweis für Sie, aber Sie können es in Text mit ASCII-Tabelle konvertieren. 74657374 gibt test als Zeichenfolge. Welches war der Wert einer ähnlich benannten Tabellenspalte, aber mit völlig anderem Typ. Der Hibernate hat also eine falsche Spalte abgefragt, die zufälligerweise zufällig existiert, also wurde die erste Ausnahme nicht column does not exist sondern could not deserialize angezeigt. Hibernate hatte lange erwartet, aber stattdessen String.

ich in diesem Schlamassel, weil richtige @Column(name="id_user") ignoriert wurde und falschen Spaltenname user von Feldnamen infered wintern der Getter nicht idUser aber nur user mit getUser() waren. Die Annotation wurde ignoriert, weil sie im Property-Getter anstelle des Felds angegeben wurde, das von Hibernate erwartet wurde, da das ID-Feld der Entitätsoberklasse mit @Id anstelle des ID-Getters, was ich grundlos erwartet hatte, erwartet wurde.

2

In meinem Fall war es ein Problem mit java.time.LocalDate von Java 8, und ich habe vergessen, einen Konverter zu diesem spezifischen Attribut zuzuweisen.

Es scheint, dass die neueren Versionen (5.2.1Final) einen eingebauten Konverter hat, so dass Sie helfen können, wenn Sie nicht an eine bestimmte Version gebunden sind.

Aber die Annotationen zu überprüfen ist definitiv der Weg zu gehen, aber ich würde sie alle überprüfen.

Verwandte Themen