したがって、修正は(JVMではなく)JDBC接続のUTCタイムゾーンを設定することだったようです:
spring.jpa.properties.hibernate.jdbc.time_zone=UTC
Instant
の使用に依存しています Java側でcreated_at
を使用して値を保持するため MySQLおよびH2でDATETIMEタイプのフィールド。
結果として得られる短縮されたkotlinコードは次のとおりです。
@Entity
data class SomeEntity(
val createdAt: Instant = Instant.now() // default created date is current UTC time
)
val dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd H:mm:ss")
createdAt = LocalDateTime.parse("2012-11-30 16:13:21", dateTimeFormatter).toInstant(ZoneOffset.UTC)
「JoopEggen」、これ
のコメントから得られたアイデア および
ボーナス
これを読んでいるのなら、SQLクエリのデバッグについても助けが必要かもしれません。
1。 H2で実行されているSQLクエリを印刷するには、TRACE_LEVEL_FILE=2
を追加します。 およびTRACE_LEVEL_SYSTEM_OUT=2
接続文字列へ(こちら
を参照) ):
spring.datasource.url=jdbc:h2:mem:dbname;TRACE_LEVEL_FILE=2;TRACE_LEVEL_SYSTEM_OUT=2;
2。 休止状態のログを有効にするには:
spring.jpa.properties.hibernate.show_sql=true
spring.jpa.properties.hibernate.use_sql_comments=true
spring.jpa.properties.hibernate.format_sql=true
logging.level.org.hibernate.type=TRACE
3。 MySQLでクエリログを有効にするには(アプローチの1つ、本番データベースでは使用しないでください!):
SET GLOBAL general_log = 'ON';
SET global log_output = 'table';
select * from mysql.general_log ORDER BY event_time DESC;