Java 8 LocalDate in hibernate falsch zugeordnet TIMESTAMP
Ich benutze Spring boot 1.4.2, das bringt hibernate 5.0.11 (JPA 2.1).
Ich möchte das Java 8 Zeit-Klassen in meinem Unternehmen, und so enthalten hibernate-java8
.
Meiner Entität definiert ein LocalDate Feld.
@Entity
@Table(name = "my_alarms_timeline", indexes = {...})
public class MyAlarm {
...
@Column(name = "validity_date")
@NotNull
private LocalDate validityDate;
}
Ich erwarte, dass dies abgebildet werden auf ein DATUM in meine H2-Datenbank.
In meiner DB ich erkläre dies als validity_date DATE NOT NULL,
.
Wenn ich versuche, tests ausführen, bekomme ich folgende Fehlermeldung:
[INFO] Caused by: org.hibernate.tool.schema.spi.SchemaManagementException: Schema-validation: wrong column type encountered in column [validity_date] in table [my_alarms_timeline]; found [date (Types#DATE)], but expecting [timestamp (Types#TIMESTAMP)]
Zu meiner überraschung, wenn ich den DB-definition validity_date TIMESTAMP NOT NULL,
bekomme ich die Fehlermeldung
Caused by: org.hibernate.tool.schema.spi.SchemaManagementException: Schema-validation: wrong column type encountered in column [validity_date] in table [my_alarms_timeline]; found [timestamp (Types#TIMESTAMP)], but expecting [date (Types#DATE)]
Dies ist gerade das Gegenteil der Botschaft von der vorherigen.
Ich habe auch versucht, statt wie hibernate-java8
eine AttributeConverter<LocalDate, java.sql.Date>
aber das führt zum selben Fehler führen.
Was muss ich tun, damit meine LocalDate ordnungsgemäß zugeordnet ist, um ein DATUM in der DB?
Ich habe auch versucht mit einem LocalDateTime
Feld zugeordnet, um einen ZEITSTEMPEL, und das funktioniert ohne Probleme...
InformationsquelleAutor Philipp | 2016-11-09
Du musst angemeldet sein, um einen Kommentar abzugeben.
So, ich habe es ausgeführt werden, indem ein
columnDefinition="DATE"
zu den@Column
annotation.Nicht sicher, warum niemand sonst ist zu sehen, wie dieses Problem...
habe diese
[Request processing failed; nested exception is org.springframework.orm.jpa.JpaSystemException: could not deserialize; nested exception is org.hibernate.type.SerializationException: could not deserialize] with root cause java.io.StreamCorruptedException: invalid stream header: 32303138 at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:863) at java.io.ObjectInputStream.<init>(ObjectInputStream.java:355) at org.hibernate.internal.util.SerializationHelper$CustomObjectInputStream.<init>(SerializationHelper.java:309)
InformationsquelleAutor Philipp
Habe ich nicht im Frühjahr, sondern im "standard" - PPV, habe ich so gemacht:
Meine Tabelle "timestamp with timezone" Spalten. Meine @Entity verwendet dann OffsetDateTime. Sie sollten in der Lage zu konvertieren zwischen Ihre Datentypen mit so etwas wie dieses.
InformationsquelleAutor stdunbar
Ich vermute, dass Sie den folgenden code irgendwo in Ihrem Projekt:
Wenn Sie mit Hibernate 5.x sollten Sie entfernen den Verweis auf Jsr310JpaConverters.class ansonsten beide Hibernate und Spring versucht mit Java 8 Datum-und Zeit-Objekte. Dies kann dazu führen, einige sehr unbeständig Verhalten (wie LocalDate Instanzen beibehalten wird mit dem falschen Wert bei der Ausführung auf Maschinen, die nicht UTC).
Sollten Sie auch entfernen Sie alle vorkommen von:
Wenn Sie es benötigen, es ist ein Indiz dafür, dass etwas ernsthaft falsch mit Ihrem hibernate-Konfiguration.
InformationsquelleAutor Thomas Turrell-Croft