Browse Source

Use Integer as database column type for java.time.Year.

Previously, that case was handled by the registration for Temporal, which maps the type to a Timestamp, which doesn't make sense for Year.
issue/year-as-integer
Oliver Drotbohm 4 weeks ago
parent
commit
f8097a67c2
No known key found for this signature in database
GPG Key ID: 9EB72C54FB72F2A7
  1. 3
      spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/convert/JdbcColumnTypes.java
  2. 35
      spring-data-jdbc/src/test/java/org/springframework/data/jdbc/core/convert/JdbcColumnTypesUnitTests.java

3
spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/convert/JdbcColumnTypes.java

@ -18,6 +18,7 @@ package org.springframework.data.jdbc.core.convert; @@ -18,6 +18,7 @@ package org.springframework.data.jdbc.core.convert;
import java.sql.Timestamp;
import java.time.LocalDateTime;
import java.time.OffsetDateTime;
import java.time.Year;
import java.time.ZonedDateTime;
import java.time.temporal.Temporal;
import java.util.LinkedHashMap;
@ -40,6 +41,7 @@ public enum JdbcColumnTypes { @@ -40,6 +41,7 @@ public enum JdbcColumnTypes {
private final ConcurrentLruCache<Class<?>, Class<?>> cache = new ConcurrentLruCache<>(64, this::doResolve);
@Override
@SuppressWarnings({ "unchecked", "rawtypes" })
public Class<?> resolvePrimitiveType(Class<?> type) {
return cache.get(type);
@ -62,6 +64,7 @@ public enum JdbcColumnTypes { @@ -62,6 +64,7 @@ public enum JdbcColumnTypes {
javaToDbType.put(ZonedDateTime.class, String.class);
javaToDbType.put(OffsetDateTime.class, OffsetDateTime.class);
javaToDbType.put(LocalDateTime.class, LocalDateTime.class);
javaToDbType.put(Year.class, Integer.class);
javaToDbType.put(Temporal.class, Timestamp.class);
}

35
spring-data-jdbc/src/test/java/org/springframework/data/jdbc/core/convert/JdbcColumnTypesUnitTests.java

@ -0,0 +1,35 @@ @@ -0,0 +1,35 @@
/*
* Copyright 2025 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.springframework.data.jdbc.core.convert;
import static org.assertj.core.api.Assertions.*;
import java.time.Year;
import org.junit.jupiter.api.Test;
/**
* Unit tests for {@link JdbcColumnTypes}.
*
* @author Oliver Drotbohm
*/
class JdbcColumnTypesUnitTests {
@Test
void usesIntegerForYear() {
assertThat(JdbcColumnTypes.INSTANCE.resolvePrimitiveType(Year.class)).isEqualTo(Integer.class);
}
}
Loading…
Cancel
Save