Wie verwende ich JodaTime mit Spring und Hibernate?

8

Ich habe also ein Problem in meiner Spring-App. Der Benutzer kann Daten mit einem Datumsauswahlwerkzeug eingeben, und diese werden in einer Mysql-Datenbank mit Hibernate gespeichert. Die Tabelle verwendet ein Datumsfeld, um sie zu speichern, sodass sie nicht gespeichert wird. Das Problem ist, dass der Server auf GMT eingestellt ist und unsere Benutzer EST oder GMT-5 sind. So wird das Datum korrekt in der Datenbank gespeichert, aber wenn es am Frontend angezeigt wird, zeigt es immer das vorherige Datum an. Ärgert mich, weil ich die Zeit nicht spare, aber offensichtlich beeinflusst es immer noch Dinge. Wie auch immer, so wird der 12.10.2001 am 12.09.2011 auf der Front erscheinen. Ich habe es mir angeschaut und es ist mir nicht erlaubt, den Server zu EST zu wechseln, also versuche ich jetzt, dies mit Jodatime zu lösen (außer jemand hat eine Idee, dass ich etwas anderes mache, um dies zu verursachen) oder eine einfachere Lösung .

Mein Problem ist, dass ich keine guten Informationen darüber finden kann, wie man Jodatime mit Spring benutzt. Momentan versuche ich nur, ein Objekt von javas Date auf joda's LocalDate umzustellen. Egal, was ich versuche, aber ich bekomme Fehler in "ungültiger Stream-Header" und "konnte nicht deserialisieren", wenn es versucht, das Date-Objekt aus der Datenbank zu ziehen und in das LocalDate -Objekt zu schieben.

Könnte mir jemand eine Anleitung geben, was ich sowohl zum Speichern als auch zum Abrufen tun muss, damit das funktioniert?

Ich benutze Spring 3.1 mit Anmerkungen und all den guten Sachen. Ich bin glücklich, Code zur Verfügung zu stellen, aber da ich nicht sicher bin, was ich habe, habe ich wirklich keinen Code, von dem ich denke, dass er hilfreich wäre. Ich könnte wirklich etwas Hilfe von den JSPs zur Datenbank und zurück nutzen. Ich denke, die Hauptsache, über die ich mir nicht sicher bin, ist, wie man das auf dem Server speichert, und ich denke, deshalb bekomme ich Hibernate-Fehler. Die Datenbank verwendet Datum wie ich erwähnt habe, also keine Zeit speichern. Wie konvertiere ich ein LocalDate in dieses?

Hier ist ein Code, wenn es hilft:

Domänenobjekt

%Vor%

Ich habe einen DatePropertyEditor für die Konvertierung von Text nach Datum zwischen JSP und Spring:

%Vor%

Und hier ist ein Teil der JSP, wo Daten eingegeben werden:

%Vor%

Keiner der restlichen Code behandelt oder berührt die Date-Objekte, der ganze Rest wird durch Annotationen und Injection behandelt und was nicht.

    
cardician 15.12.2011, 14:54
quelle

2 Antworten

7

Ich würde vorschlagen, dass Sie die Spring 3 verwenden Converter SPI anstelle von regulären PropertyEditors.

Dann schreibe einfach einen benutzerdefinierten Konverter:

%Vor%

Aber das ist nur die Frühlingsseite. Sie müssen noch sicherstellen, dass Hibernate über JodaTime Bescheid weiß. Sehen Sie sich dazu das Joda Time - Hibernate Support Projekt an.

    
Sean Patrick Floyd 15.12.2011, 16:32
quelle
4

Dieses Problem ist nicht neu, werfen Sie einen Blick auf die Diskussion, die ich auf meinen Blog gestellt habe: Ссылка

Mein Projekt (Usertyp - Ссылка ) löste dies mit seiner PersistentDateTime-Klasse. Ich würde vorschlagen, dass Sie dies verwenden, um einen Benutzertyp für Ihre Entität bereitzustellen.

Das Javadoc in dieser Klasse beschreibt, wie Sie die Zone, die für das Persistieren und anschließende erneute Aufblasen verwendet wird, weiter optimieren können: Ссылка

Wenn Sie Hibernate 4 verwenden, können Sie auch die automatische Registrierung verwenden. Einzelheiten zur Verwendung dieser Funktion finden Sie unter Ссылка

HTH

Chris

    
Chris Pheby 21.02.2012 08:14
quelle

Tags und Links