Wir verwenden einen benutzerdefinierten Hibernate-Datumstyp. Jedes Mal, wenn wir einen Parameter für eine Abfrage setzen, verwenden wir eine Basisklasse oder eine Hilfsmethode, um die Zeitzone des Benutzers an den benutzerdefinierten Typparameter zu übergeben.
Sie könnten mit nur manuell die Zeit in der Hilfsmethode für Abfragen anpassen, aber auf diese Weise Daten, die in die Datenbank eingelesen oder geschrieben werden auch korrekt konvertiert werden. Diese Methode behandelt auch die Situation, in der die Datenbank das Datum in seiner lokalen Zeitzone speichert. Selbst wenn Sie einen Benutzer in einer Zeitzone, einen Datenbankserver in einem anderen und Java unter Verwendung von GMT haben, kann es alles klarstellen. Es endet aussehen wie:
Properties properties = new Properties();
properties.setProperty("timeZone", databaseTimeZone);
query.setParameter("from", dateEnteredByUser, Hibernate.custom(LocalizedDateType.class, properties));
Als zusätzlichen Bonus, verwenden wir dies mit der Tatsache zu tun, dass SQL Server konvertiert 23: 59: 59.999 auf den nächsten Tag. Im benutzerdefinierten Typ überprüfen wir das und setzen es zurück.
Das hat mich auch etwas gebissen. Es hilft nicht, dass in Oracle 'DATE' ein Datum und eine Uhrzeit stehen, die mit' Date' von Java übereinstimmen, während 'TIMESTAMP' ein Datum und eine Uhrzeit mit Mikrosekunden ist. –
Jetzt ist die Methode setTimestamp (String, Date) vom Typ Query veraltet –
Maske
Sie gespeichert meinen Tag, danke im Voraus. – VAdaihiep