27
27
import org .springframework .core .convert .converter .Converter ;
28
28
import org .springframework .data .convert .ReadingConverter ;
29
29
import org .springframework .data .relational .core .dialect .SqlServerDialect ;
30
+ import org .springframework .data .util .ClassUtils ;
31
+ import org .springframework .lang .Nullable ;
30
32
31
33
/**
32
34
* {@link SqlServerDialect} that registers JDBC specific converters.
@@ -41,7 +43,21 @@ public class JdbcSqlServerDialect extends SqlServerDialect implements JdbcDialec
41
43
42
44
public static final JdbcSqlServerDialect INSTANCE = new JdbcSqlServerDialect ();
43
45
44
- private static final Set <Class <?>> SIMPLE_TYPES = Set .of (DateTimeOffset .class );
46
+ private static final @ Nullable Class <?> DATE_TIME_OFFSET_CLASS = ClassUtils
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
+ }
45
61
46
62
@ Override
47
63
public Set <Class <?>> simpleTypes () {
@@ -52,8 +68,7 @@ public Set<Class<?>> simpleTypes() {
52
68
public Collection <Object > getConverters () {
53
69
54
70
List <Object > converters = new ArrayList <>(super .getConverters ());
55
- converters .add (DateTimeOffsetToOffsetDateTimeConverter .INSTANCE );
56
- converters .add (DateTimeOffsetToInstantConverter .INSTANCE );
71
+ converters .addAll (CONVERTERS );
57
72
return converters ;
58
73
}
59
74
0 commit comments