Jadi sepertinya perbaikannya adalah mengatur zona waktu UTC untuk koneksi JDBC (bukan JVM):
spring.jpa.properties.hibernate.jdbc.time_zone=UTC
dan itu bergantung pada penggunaan Instant
untuk menjaga nilai di sisi Java dan dengan created_at
bidang memiliki tipe DATETIME di MySQL dan H2.
Hasil singkatan kode kotlin adalah:
@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)
Ide diambil dari komentar "Joop Eggen", ini dan ini artikel.
Bonus
Saya rasa jika Anda membaca ini, Anda mungkin juga memerlukan bantuan dengan men-debug kueri SQL.
1. Untuk mencetak kueri SQL yang berjalan pada H2 tambahkan TRACE_LEVEL_FILE=2
dan TRACE_LEVEL_SYSTEM_OUT=2
ke string koneksi (lihat di sini
):
spring.datasource.url=jdbc:h2:mem:dbname;TRACE_LEVEL_FILE=2;TRACE_LEVEL_SYSTEM_OUT=2;
2. Untuk mengaktifkan log hibernasi:
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. Untuk mengaktifkan log kueri di MySQL (salah satu pendekatan, jangan gunakan pada db produksi!):
SET GLOBAL general_log = 'ON';
SET global log_output = 'table';
select * from mysql.general_log ORDER BY event_time DESC;