Vereinfachte BeispieleKann nicht deserialisieren Datetime in NativeQuery mit Java/Hibernate
ich eine native Abfrage mit Datum in es ausgeführt:
SELECT id, start FROM event;
Ich habe ein SqlResultSetMapping wie:
@SqlResultSetMapping(
name="EventMapping",
classes={
@ConstructorResult(
targetClass=de.teamsystems.domain.OverviewEvent.class,
columns={
@ColumnResult(name="id", type = Long.class),
@ColumnResult(name="start", type = DateTime.class)
}
)
}
)
Und meine OverviewEvent-Klasse sieht wie folgt aus:
@Entity
public class OverviewEvent {
@Id
private Long id;
private String name;
private DateTime start;
public Long getId() {
return id;
}
public DateTime getStart() {
return start;
}
public OverviewEvent(Long id, DateTime start) {
this.id = id;
this.start = start;
}
}
Wenn ich diesen Code in meinem Controller ausführen, bekomme ich die folgende Ausnahme:
{
"error": "Internal Server Error",
"exception": "javax.persistence.PersistenceException",
"message": "org.hibernate.type.SerializationException: could not deserialize",
"path": "/event",
"status": 500,
"timestamp": "2017-03-13T22:22:30.527+0100"
}
Die Log-Dateien sagen:
2017-03-13 22:22:30.523 ERROR 23479 --- [nio-8080-exec-1] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is javax.persistence.PersistenceException: org.hibernate.type.SerializationException: could not deserialize] with root cause
java.io.StreamCorruptedException: invalid stream header: 32303137
at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:808) ~[na:1.8.0_111]
Wenn ich die Datetime in String ändern In der OverviewEvent-Klasse und in SqlResultSetMapping funktioniert es. Aber ich würde gerne mit dem Datetime-Format arbeiten.
Kann mir jemand mit dieser Ausnahme helfen. Ich versuchte verschiedene Dinge wie:
@Type(type = "org.jadira.usertype.dateandtime.joda.PersistentDateTime")
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")
private DateTime start;
Aber die Ausnahme blieb gleich. Danke, dass Sie mir geholfen haben.
Danke. Ich werde es versuchen, sobald ich heute Abend wieder am Projekt bin. Wie ich ein Neuling bin, ist es das, worüber Sie sprechen: http://www.baeldung.com/jackson-custom-serialization http://www.baeldung.com/jackson-deserialization – schingeldi
Arbeitete. Danke vielmals – schingeldi