2424import java .util .List ;
2525import java .util .Set ;
2626
27+ import org .jspecify .annotations .Nullable ;
28+ 2729import org .springframework .core .convert .converter .Converter ;
2830import org .springframework .data .convert .ReadingConverter ;
2931import 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