तो ऐसा लगता है कि JDBC कनेक्शन (JVM के बजाय) के लिए UTC टाइमज़ोन सेट करना ठीक था:
spring.jpa.properties.hibernate.jdbc.time_zone=UTC
और यह Instant
. का उपयोग करने पर निर्भर करता है जावा पक्ष पर मान रखने के लिए और created_at
. के साथ फ़ील्ड जिसमें MySQL और H2 में DATETIME टाइप है।
संक्षिप्त परिणामी कोटलिन कोड है:
@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)
"जूप एगेन" की टिप्पणियों से लिए गए विचार, यह और यह लेख।
बोनस
मुझे लगता है कि यदि आप इसे पढ़ रहे हैं, तो आपको 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 में क्वेरी लॉग को सक्षम करने के लिए (एक दृष्टिकोण, उत्पादन डीबी पर उपयोग न करें!):
SET GLOBAL general_log = 'ON';
SET global log_output = 'table';
select * from mysql.general_log ORDER BY event_time DESC;