2017-03-13 3 views
0

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.

Antwort

1

Versuchen Sie es mit Date(java.util.Date) statt DateTime:

@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss") 
    private Date start; 

oder eine benutzerdefinierte de/Serializer für Datetime erstellen.

+0

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

+0

Arbeitete. Danke vielmals – schingeldi

Verwandte Themen