[JAVA] À propos du type de date / heure de la classe d'entité de Doma2

Prémisse de ce sujet

--Utilisez Doma2.

Le site que j'ai utilisé comme référence

Quel type le type DB TIMESTAMP (date et heure) doit-il être géré par la classe d'entité?

Quand il y a un type TIMESTAMP (date et heure) dans la table DB, je me demandais quel type gérer. Veuillez nous donner votre avis.

Type de date / heure pris en charge par Doma2

Doma2 prend en charge les types liés suivants comme types de date / heure. http://doma.readthedocs.io/ja/stable/basic/#id4

Parmi eux, lorsqu'il s'agit de date + heure, ce sera l'un des types suivants.

Type généré par Doma-Gen

Dans Doma-Gen à l'ère Doma1, le type correspondant au type TIMESTAMP (date et heure) était java.sql.Timestamp. http://doma.seasar.org/extension/doma_gen_gen_task.html#EntityConfig

Cependant, dans Doma-Gen de Doma2, il s'agit de java.time.LocalDateTime. http://doma-gen.readthedocs.io/ja/stable/gen/#entityconfig

Ce que je pense est un problème avec java.time.LocalDateTime

Pour plus d'informations sur le site suivant, java.time.LocalDateTime ne stocke pas la date et l'heure en UTC, mais plutôt en «date et heure sans aucune information de fuseau horaire». https://qiita.com/dmikurube/items/15899ec9de643e91497c#javatimelocaldatetime

Dans le type DB TIMESTAMP (date et heure), la date et l'heure sont stockées en UTC, donc si vous la gérez avec java.time.LocalDateTime, les informations de fuseau horaire seront perdues.

À propos, dans PostgreSQL, il est stocké en interne en UTC. https://www.postgresql.jp/document/9.6/html/datatype-datetime.html

Dois-je utiliser java.sql.Timestamp?

java.sql.Timestamp peut contenir un UTC, donc si vous spécifiez un fuseau horaire, la date et l'heure de ce fuseau horaire seront déterminées. En d'autres termes, si la date et l'heure sont gérées par UTC dans le système, vous pouvez spécifier le fuseau horaire et le convertir en la représentation de la date et de l'heure de ce fuseau horaire au moment de la sortie. En ce sens, je pense qu'il serait préférable d'utiliser java.sql.Timestamp.

D'autre part, dans le cas de java.time.LocalDateTime, il est nécessaire de savoir quel fuseau horaire la représentation de la date et de l'heure, qui n'inclut aucune information de fuseau horaire, est utilisée. Par exemple, si la base de données et le système peuvent être limités à un fuseau horaire, tel que le fuseau horaire japonais uniquement, cela peut être suffisant.

Comment changer le type correspondant au type TIMESTAMP (date et heure) en java.sql.Timestamp dans Doma-Gen

Préparez une classe GenDialect personnalisée.

Préparez une classe personnalisée en héritant de la classe GenDialect de la base de données à utiliser (dans cet exemple, la classe GenDialect de PostgreSQL).

/**
 *Une classe qui personnalise les dialectes pour PostgreSQL
 */
public class CustomPostgresGenDialect extends PostgresGenDialect {
    public CustomPostgresGenDialect() {
        //L'horodatage avec le fuseau horaire est java.sql.Mapper sur l'horodatage.
        classNameMap.put("timestamptz", Timestamp.class.getName());
    }
}

Spécifiez dans le paramètre de niveau supérieur de Doma-Gen.

Exécutez Doma-Gen avec la classe ci-dessus dans le niveau supérieur genDialectClassName. (La classe spécifiée doit être incluse dans le chemin de classe lors de l'exécution de la tâche.) http://doma-gen.readthedocs.io/ja/stable/gen/#id2

Recommended Posts

À propos du type de date / heure de la classe d'entité de Doma2
Utilisation de la classe Date
[Ruby] Informations de base sur les classes Date, Heure et DateHeure
Explication des objets Ruby Time et Date
[Connaissance de base de Java] À propos de la conversion de type
À propos de next () et nextLine () de la classe Scanner
La date et l'heure de java8 ont été mises à jour
Date et l'heure
À propos de l'héritage de classe.
À propos de la classe Java
Comparaison de vitesse au moment de la génération au moment de la conversion de la date
Convivialité de la classe de date et d'heure dans chaque langue
Sortie du jour en utilisant la classe Ruby's Date
Traitement de la date et de l'heure en Ruby. Utilisez correctement la date et l'heure.