Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit ed7844c

Browse files
committed
Guard JdbcSqlServerDialect against absence of SQL Server JDBC driver.
Check for presence of microsoft.sql.DateTimeOffset class before returning it as type and associated converters. Closes #2153
1 parent fa14334 commit ed7844c

File tree

1 file changed

+19
-3
lines changed

1 file changed

+19
-3
lines changed

‎spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/dialect/JdbcSqlServerDialect.java‎

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,12 @@
2424
import java.util.List;
2525
import java.util.Set;
2626

27+
import org.jspecify.annotations.Nullable;
28+
2729
import org.springframework.core.convert.converter.Converter;
2830
import org.springframework.data.convert.ReadingConverter;
2931
import org.springframework.data.relational.core.dialect.SqlServerDialect;
32+
import org.springframework.data.util.ClassUtils;
3033

3134
/**
3235
* {@link SqlServerDialect} that registers JDBC specific converters.
@@ -41,7 +44,21 @@ public class JdbcSqlServerDialect extends SqlServerDialect implements JdbcDialec
4144

4245
public static final JdbcSqlServerDialect INSTANCE = new JdbcSqlServerDialect();
4346

44-
private static final Set<Class<?>> SIMPLE_TYPES = Set.of(DateTimeOffset.class);
47+
private static final @Nullable Class<?> DATE_TIME_OFFSET_CLASS = ClassUtils
48+
.loadIfPresent("microsoft.sql.DateTimeOffset", JdbcSqlServerDialect.class.getClassLoader());
49+
private static final Set<Class<?>> SIMPLE_TYPES;
50+
private static final List<Object> CONVERTERS;
51+
52+
static {
53+
54+
if (DATE_TIME_OFFSET_CLASS != null) {
55+
SIMPLE_TYPES = Set.of(DATE_TIME_OFFSET_CLASS);
56+
CONVERTERS = List.of(DateTimeOffsetToOffsetDateTimeConverter.INSTANCE, DateTimeOffsetToInstantConverter.INSTANCE);
57+
} else {
58+
SIMPLE_TYPES = Set.of();
59+
CONVERTERS = List.of();
60+
}
61+
}
4562

4663
@Override
4764
public Set<Class<?>> simpleTypes() {
@@ -52,8 +69,7 @@ public Set<Class<?>> simpleTypes() {
5269
public Collection<Object> getConverters() {
5370

5471
List<Object> converters = new ArrayList<>(super.getConverters());
55-
converters.add(DateTimeOffsetToOffsetDateTimeConverter.INSTANCE);
56-
converters.add(DateTimeOffsetToInstantConverter.INSTANCE);
72+
converters.addAll(CONVERTERS);
5773
return converters;
5874
}
5975

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /