--Utilisez Doma2.
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.
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.
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
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
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.
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());
}
}
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