From 6d64e854e2d282ef4184c32a308a2be649a7b214 Mon Sep 17 00:00:00 2001 From: Gavin King Date: Mon, 18 Dec 2023 20:52:37 +0100 Subject: [PATCH] HHH-17576 inappropriate use of getDefaultTimestampPrecision() as default precision This default is only appropriate for timestamps (hence the name) and should not be used for dates or plain times. --- .../hibernate/type/descriptor/java/CalendarDateJavaType.java | 2 +- .../hibernate/type/descriptor/java/CalendarTimeJavaType.java | 5 ++++- .../org/hibernate/type/descriptor/java/DateJavaType.java | 1 + .../org/hibernate/type/descriptor/java/JdbcTimeJavaType.java | 5 ++++- .../hibernate/type/descriptor/java/LocalTimeJavaType.java | 5 ++++- .../hibernate/type/descriptor/java/OffsetTimeJavaType.java | 5 ++++- .../hibernate/type/descriptor/sql/spi/DdlTypeRegistry.java | 3 --- 7 files changed, 18 insertions(+), 8 deletions(-) diff --git a/hibernate-core/src/main/java/org/hibernate/type/descriptor/java/CalendarDateJavaType.java b/hibernate-core/src/main/java/org/hibernate/type/descriptor/java/CalendarDateJavaType.java index 64f19ab1c1..aefc954d83 100644 --- a/hibernate-core/src/main/java/org/hibernate/type/descriptor/java/CalendarDateJavaType.java +++ b/hibernate-core/src/main/java/org/hibernate/type/descriptor/java/CalendarDateJavaType.java @@ -142,6 +142,6 @@ public class CalendarDateJavaType extends AbstractTemporalJavaType { @Override public int getDefaultSqlPrecision(Dialect dialect, JdbcType jdbcType) { - return dialect.getDefaultTimestampPrecision(); + return 0; } } diff --git a/hibernate-core/src/main/java/org/hibernate/type/descriptor/java/CalendarTimeJavaType.java b/hibernate-core/src/main/java/org/hibernate/type/descriptor/java/CalendarTimeJavaType.java index 79b2226bc0..cf3fc317f1 100644 --- a/hibernate-core/src/main/java/org/hibernate/type/descriptor/java/CalendarTimeJavaType.java +++ b/hibernate-core/src/main/java/org/hibernate/type/descriptor/java/CalendarTimeJavaType.java @@ -144,6 +144,9 @@ public class CalendarTimeJavaType extends AbstractTemporalJavaType { @Override public int getDefaultSqlPrecision(Dialect dialect, JdbcType jdbcType) { - return dialect.getDefaultTimestampPrecision(); + // times represent repeating events - they + // almost never come equipped with seconds, + // let alone fractional seconds! + return 0; } } diff --git a/hibernate-core/src/main/java/org/hibernate/type/descriptor/java/DateJavaType.java b/hibernate-core/src/main/java/org/hibernate/type/descriptor/java/DateJavaType.java index 36bb6e12df..20dfbd99c2 100644 --- a/hibernate-core/src/main/java/org/hibernate/type/descriptor/java/DateJavaType.java +++ b/hibernate-core/src/main/java/org/hibernate/type/descriptor/java/DateJavaType.java @@ -52,6 +52,7 @@ public class DateJavaType extends AbstractTemporalJavaType implements Vers @Override public int getDefaultSqlPrecision(Dialect dialect, JdbcType jdbcType) { + // this "Date" is really a timestamp return dialect.getDefaultTimestampPrecision(); } diff --git a/hibernate-core/src/main/java/org/hibernate/type/descriptor/java/JdbcTimeJavaType.java b/hibernate-core/src/main/java/org/hibernate/type/descriptor/java/JdbcTimeJavaType.java index 43db526fc8..bf9c4b9fa1 100644 --- a/hibernate-core/src/main/java/org/hibernate/type/descriptor/java/JdbcTimeJavaType.java +++ b/hibernate-core/src/main/java/org/hibernate/type/descriptor/java/JdbcTimeJavaType.java @@ -273,7 +273,10 @@ public class JdbcTimeJavaType extends AbstractTemporalJavaType { @Override public int getDefaultSqlPrecision(Dialect dialect, JdbcType jdbcType) { - return dialect.getDefaultTimestampPrecision(); + // times represent repeating events - they + // almost never come equipped with seconds, + // let alone fractional seconds! + return 0; } @Override diff --git a/hibernate-core/src/main/java/org/hibernate/type/descriptor/java/LocalTimeJavaType.java b/hibernate-core/src/main/java/org/hibernate/type/descriptor/java/LocalTimeJavaType.java index 5913330e93..a37070f983 100644 --- a/hibernate-core/src/main/java/org/hibernate/type/descriptor/java/LocalTimeJavaType.java +++ b/hibernate-core/src/main/java/org/hibernate/type/descriptor/java/LocalTimeJavaType.java @@ -189,7 +189,10 @@ public class LocalTimeJavaType extends AbstractTemporalJavaType { @Override public int getDefaultSqlPrecision(Dialect dialect, JdbcType jdbcType) { - return dialect.getDefaultTimestampPrecision(); + // times represent repeating events - they + // almost never come equipped with seconds, + // let alone fractional seconds! + return 0; } } diff --git a/hibernate-core/src/main/java/org/hibernate/type/descriptor/java/OffsetTimeJavaType.java b/hibernate-core/src/main/java/org/hibernate/type/descriptor/java/OffsetTimeJavaType.java index 2e62dc96e1..1948c5313e 100644 --- a/hibernate-core/src/main/java/org/hibernate/type/descriptor/java/OffsetTimeJavaType.java +++ b/hibernate-core/src/main/java/org/hibernate/type/descriptor/java/OffsetTimeJavaType.java @@ -251,7 +251,10 @@ public class OffsetTimeJavaType extends AbstractTemporalJavaType { @Override public int getDefaultSqlPrecision(Dialect dialect, JdbcType jdbcType) { - return dialect.getDefaultTimestampPrecision(); + // times represent repeating events - they + // almost never come equipped with seconds, + // let alone fractional seconds! + return 0; } } diff --git a/hibernate-core/src/main/java/org/hibernate/type/descriptor/sql/spi/DdlTypeRegistry.java b/hibernate-core/src/main/java/org/hibernate/type/descriptor/sql/spi/DdlTypeRegistry.java index b5e6d573da..1d8ad5e544 100644 --- a/hibernate-core/src/main/java/org/hibernate/type/descriptor/sql/spi/DdlTypeRegistry.java +++ b/hibernate-core/src/main/java/org/hibernate/type/descriptor/sql/spi/DdlTypeRegistry.java @@ -162,9 +162,6 @@ public class DdlTypeRegistry implements Serializable { return getTypeName( typeCode, Size.precision( dialect.getFloatPrecision() ) ); case SqlTypes.DOUBLE: return getTypeName( typeCode, Size.precision( dialect.getDoublePrecision() ) ); - case SqlTypes.TIME: - case SqlTypes.TIME_WITH_TIMEZONE: - case SqlTypes.TIME_UTC: case SqlTypes.TIMESTAMP: case SqlTypes.TIMESTAMP_WITH_TIMEZONE: case SqlTypes.TIMESTAMP_UTC: