2727import org .springframework .core .convert .converter .Converter ;
2828import org .springframework .data .convert .ReadingConverter ;
2929import org .springframework .data .relational .core .dialect .SqlServerDialect ;
30+ import org .springframework .data .util .ReflectionUtils ;
31+ import org .springframework .lang .Nullable ;
3032
3133/**
3234 * {@link SqlServerDialect} that registers JDBC specific converters.
@@ -41,7 +43,21 @@ public class JdbcSqlServerDialect extends SqlServerDialect {
4143
4244 public static JdbcSqlServerDialect INSTANCE = new JdbcSqlServerDialect ();
4345
44- private static final Set <Class <?>> SIMPLE_TYPES = Set .of (DateTimeOffset .class );
46+ private static final @ Nullable Class <?> DATE_TIME_OFFSET_CLASS = ReflectionUtils
47+ .loadIfPresent ("microsoft.sql.DateTimeOffset" , JdbcSqlServerDialect .class .getClassLoader ());
48+ private static final Set <Class <?>> SIMPLE_TYPES ;
49+ private static final List <Object > CONVERTERS ;
50+
51+ static {
52+
53+ if (DATE_TIME_OFFSET_CLASS != null ) {
54+ SIMPLE_TYPES = Set .of (DATE_TIME_OFFSET_CLASS );
55+ CONVERTERS = List .of (DateTimeOffsetToOffsetDateTimeConverter .INSTANCE , DateTimeOffsetToInstantConverter .INSTANCE );
56+ } else {
57+ SIMPLE_TYPES = Set .of ();
58+ CONVERTERS = List .of ();
59+ }
60+ }
4561
4662 @ Override
4763 public Set <Class <?>> simpleTypes () {
@@ -52,8 +68,7 @@ public Set<Class<?>> simpleTypes() {
5268 public Collection <Object > getConverters () {
5369
5470 List <Object > converters = new ArrayList <>(super .getConverters ());
55- converters .add (DateTimeOffsetToOffsetDateTimeConverter .INSTANCE );
56- converters .add (DateTimeOffsetToInstantConverter .INSTANCE );
71+ converters .addAll (CONVERTERS );
5772 return converters ;
5873 }
5974
0 commit comments