[JAVA] Informationen zum Datums- / Uhrzeittyp der Entitätsklasse von Doma2

Prämisse dieses Themas

--Verwenden Sie Doma2. --Automatisch Entität mit Doma-Gen erzeugen. --UTC ist die zweite Epoche.

Die Seite, die ich als Referenz verwendet habe

Welchen Typ sollte der DB TIMESTAMP-Typ (Datum und Uhrzeit) von der Entitätsklasse verarbeiten?

Wenn die DB-Tabelle einen TIMESTAMP-Typ (Datum und Uhrzeit) enthält, habe ich mich gefragt, welcher Typ behandelt werden soll. Bitte geben Sie uns Ihre Meinung.

Von Doma2 unterstützter Datums- / Uhrzeittyp

Doma2 unterstützt die folgenden verknüpften Typen als Datums- / Uhrzeittypen. http://doma.readthedocs.io/ja/stable/basic/#id4

Unter diesen wird es beim Umgang mit Datum + Uhrzeit einen der folgenden Typen geben.

Doma-Gen generierter Typ

In Doma-Gen in der Doma1-Ära war der Typ, der dem TIMESTAMP-Typ (Datum und Uhrzeit) entsprach, java.sql.Timestamp. http://doma.seasar.org/extension/doma_gen_gen_task.html#EntityConfig

In Doma-Gen von Doma2 ist es jedoch java.time.LocalDateTime. http://doma-gen.readthedocs.io/ja/stable/gen/#entityconfig

Was ich denke, ist ein Problem mit java.time.LocalDateTime

Für weitere Informationen auf der folgenden Site speichert java.time.LocalDateTime Datum und Uhrzeit nicht in UTC, sondern in "Datum und Uhrzeit ohne Zeitzoneninformationen". https://qiita.com/dmikurube/items/15899ec9de643e91497c#javatimelocaldatetime

Im DB TIMESTAMP-Typ (Datum und Uhrzeit) werden Datum und Uhrzeit in UTC gespeichert. Wenn Sie also mit java.time.LocalDateTime damit umgehen, gehen die Zeitzoneninformationen verloren.

In PostgreSQL wird es übrigens intern in UTC gespeichert. https://www.postgresql.jp/document/9.6/html/datatype-datetime.html

Soll ich java.sql.Timestamp verwenden?

java.sql.Timestamp kann eine UTC enthalten. Wenn Sie also eine Zeitzone angeben, werden Datum und Uhrzeit in dieser Zeitzone bestimmt. Mit anderen Worten, wenn Datum und Uhrzeit in UTC im System behandelt werden, können Sie die Zeitzone angeben und zum Zeitpunkt der Ausgabe in die Datums- und Zeitdarstellung dieser Zeitzone konvertieren. In diesem Sinne denke ich, dass es besser wäre, java.sql.Timestamp zu verwenden.

Im Fall von java.time.LocalDateTime muss jedoch bekannt sein, in welcher Zeitzone die Datums- und Zeitdarstellung verwendet wird, die keine Zeitzoneninformationen enthält. Wenn beispielsweise sowohl die Datenbank als auch das System auf eine Zeitzone beschränkt werden können, z. B. nur die japanische Zeitzone, kann dies ausreichend sein.

So ändern Sie den Typ, der dem TIMESTAMP-Typ (Datum und Uhrzeit) entspricht, in java.sql.Timestamp in Doma-Gen

Bereiten Sie eine benutzerdefinierte GenDialect-Klasse vor.

Bereiten Sie eine benutzerdefinierte Klasse vor, indem Sie die GenDialect-Klasse der zu verwendenden Datenbank erben (in diesem Beispiel die GenDialect-Klasse von PostgreSQL).

/**
 *Eine Klasse, die Dialekte für PostgreSQL anpasst
 */
public class CustomPostgresGenDialect extends PostgresGenDialect {
    public CustomPostgresGenDialect() {
        //Zeitstempel mit Zeitzone ist Java.sql.Karte zum Zeitstempel.
        classNameMap.put("timestamptz", Timestamp.class.getName());
    }
}

Geben Sie im obersten Parameter von Doma-Gen an.

Führen Sie Doma-Gen mit der oben genannten Klasse in der obersten Ebene "genDialectClassName" aus. (Die angegebene Klasse muss bei der Ausführung der Aufgabe im Klassenpfad enthalten sein.) http://doma-gen.readthedocs.io/ja/stable/gen/#id2

Recommended Posts

Informationen zum Datums- / Uhrzeittyp der Entitätsklasse von Doma2
Verwendung der Datumsklasse
[Ruby] Grundlagen zu Datum, Uhrzeit und Datumszeit
Erläuterung der Ruby Time- und Date-Objekte
[Grundkenntnisse in Java] Informationen zur Typkonvertierung
Informationen zu next () und nextLine () der Scannerklasse
Das Datum und die Uhrzeit von java8 wurden aktualisiert
Datum (und Uhrzeit
Informationen zur Klassenvererbung.
Über die Java-Klasse
Geschwindigkeitsvergleich zum Zeitpunkt der Generierung zum Zeitpunkt der Datumskonvertierung
Verwendbarkeit von Datums- und Zeitklasse in jeder Sprache
Ausgabe des Tages mit der Ruby's Date-Klasse
Umgang mit Datum und Uhrzeit in Ruby. Verwenden Sie Datum und Uhrzeit richtig.