1919import org .hibernate .QueryTimeoutException ;
2020import org .hibernate .boot .model .FunctionContributions ;
2121import org .hibernate .boot .model .TypeContributions ;
22+ import org .hibernate .cfg .MappingSettings ;
2223import org .hibernate .dialect .aggregate .AggregateSupport ;
2324import org .hibernate .dialect .aggregate .OracleAggregateSupport ;
2425import org .hibernate .dialect .function .CommonFunctionFactory ;
9899import org .hibernate .type .descriptor .sql .internal .NamedNativeOrdinalEnumDdlTypeImpl ;
99100import org .hibernate .type .descriptor .sql .spi .DdlTypeRegistry ;
100101import org .hibernate .type .format .jackson .JacksonIntegration ;
102+ import org .hibernate .type .format .jackson .JacksonJsonFormatMapper ;
101103import org .hibernate .type .spi .TypeConfiguration ;
102104
103105import jakarta .persistence .GenerationType ;
108110import static org .hibernate .LockOptions .NO_WAIT ;
109111import static org .hibernate .LockOptions .SKIP_LOCKED ;
110112import static org .hibernate .LockOptions .WAIT_FOREVER ;
113+ import static org .hibernate .cfg .DialectSpecificSettings .ORACLE_OSON_DISABLED ;
111114import static org .hibernate .dialect .DialectLogging .DIALECT_MESSAGE_LOGGER ;
112115import static org .hibernate .dialect .OracleJdbcHelper .getArrayJdbcTypeConstructor ;
113116import static org .hibernate .dialect .OracleJdbcHelper .getNestedTableJdbcTypeConstructor ;
114117import static org .hibernate .exception .spi .TemplatedViolatedConstraintNameExtractor .extractUsingTemplate ;
115118import static org .hibernate .internal .util .JdbcExceptionHelper .extractErrorCode ;
116119import static org .hibernate .internal .util .StringHelper .isEmpty ;
117120import static org .hibernate .internal .util .StringHelper .isNotEmpty ;
121+ import static org .hibernate .internal .util .config .ConfigurationHelper .getBoolean ;
118122import static org .hibernate .query .common .TemporalUnit .DAY ;
119123import static org .hibernate .query .common .TemporalUnit .HOUR ;
120124import static org .hibernate .query .common .TemporalUnit .MINUTE ;
@@ -183,8 +187,7 @@ public class OracleDialect extends Dialect {
183187
184188 private static final DatabaseVersion MINIMUM_VERSION = DatabaseVersion .make ( 19 );
185189
186- private static final String JACKSON_MAPPER_NAME = "jackson" ;
187- private static boolean OracleOsonExtensionUsed = false ;
190+ private boolean OracleOsonExtensionUsed = false ;
188191
189192 private final OracleUserDefinedTypeExporter userDefinedTypeExporter = new OracleUserDefinedTypeExporter ( this );
190193 private final UniqueDelegate uniqueDelegate = new CreateTableUniqueDelegate (this );
@@ -209,9 +212,6 @@ protected void applyAggregateColumnCheck(StringBuilder buf, AggregateColumn aggr
209212 // Is the database accessed using a database service protected by Application Continuity.
210213 protected final boolean applicationContinuity ;
211214
212- // Is the database OSON format should be disabled.
213- protected final boolean isOracleOsonDisabled ;
214-
215215 protected final int driverMajorVersion ;
216216
217217 protected final int driverMinorVersion ;
@@ -226,7 +226,6 @@ public OracleDialect(DatabaseVersion version) {
226226 autonomous = false ;
227227 extended = false ;
228228 applicationContinuity = false ;
229- isOracleOsonDisabled = false ;
230229 driverMajorVersion = 19 ;
231230 driverMinorVersion = 0 ;
232231 }
@@ -240,7 +239,6 @@ public OracleDialect(DialectResolutionInfo info, OracleServerConfiguration serve
240239 autonomous = serverConfiguration .isAutonomous ();
241240 extended = serverConfiguration .isExtended ();
242241 applicationContinuity = serverConfiguration .isApplicationContinuity ();
243- isOracleOsonDisabled = serverConfiguration .isOSONEnabled ();
244242 this .driverMinorVersion = serverConfiguration .getDriverMinorVersion ();
245243 this .driverMajorVersion = serverConfiguration .getDriverMajorVersion ();
246244 }
@@ -257,7 +255,13 @@ public boolean isApplicationContinuity() {
257255 return applicationContinuity ;
258256 }
259257
260- public boolean isOracleOsonDisabled () {return isOracleOsonDisabled ;}
258+ private static boolean isJacksonJsonFormatMapper (ConfigurationService configService ) {
259+ // Mirror the behavior of SessionFactoryOptionsBuilder#determineJsonFormatMapper
260+ final String mapperName = configService .getSetting ( MappingSettings .JSON_FORMAT_MAPPER ,
261+ StandardConverters .STRING ,JacksonJsonFormatMapper .SHORT_NAME );
262+ return JacksonJsonFormatMapper .SHORT_NAME .equalsIgnoreCase ( mapperName )
263+ || mapperName == null && JacksonIntegration .getJsonJacksonFormatMapperOrNull () != null ;
264+ }
261265
262266 @ Override
263267 protected DatabaseVersion getMinimumSupportedVersion () {
@@ -994,20 +998,16 @@ public void contributeTypes(TypeContributions typeContributions, ServiceRegistry
994998
995999 final ConfigurationService configService = serviceRegistry .requireService ( ConfigurationService .class );
9961000
997-
998- final String mapperName = configService .getSetting ( "hibernate.type.json_format_mapper" ,
999- StandardConverters .STRING ,JACKSON_MAPPER_NAME );
1000-
10011001 if ( getVersion ().isSameOrAfter ( 21 ) ) {
1002-
1003- if ( !isOracleOsonDisabled () && JacksonIntegration .isOracleOsonExtensionAvailable () && JACKSON_MAPPER_NAME . equalsIgnoreCase ( mapperName )) {
1002+ final boolean osonDisabled = getBoolean ( ORACLE_OSON_DISABLED , configService . getSettings () );
1003+ if ( !osonDisabled && JacksonIntegration .isOracleOsonExtensionAvailable () && isJacksonJsonFormatMapper ( configService )) {
10041004 // We must check that that extension is available and actually used.
10051005 typeContributions .contributeJdbcType ( OracleOsonJacksonJdbcType .INSTANCE );
10061006 typeContributions .contributeJdbcTypeConstructor ( OracleOsonArrayJdbcTypeConstructor .INSTANCE );
10071007
10081008 DIALECT_MESSAGE_LOGGER .DIALECT_LOGGER .log ( Logger .Level .DEBUG ,
10091009 "Oracle OSON Jackson extension used" );
1010- // as we speak this is not supported by OSON extension
1010+ // as we speak, this is not supported by OSON extension
10111011 OracleOsonExtensionUsed = true ;
10121012 }
10131013 else {
@@ -1017,8 +1017,6 @@ public void contributeTypes(TypeContributions typeContributions, ServiceRegistry
10171017 DIALECT_MESSAGE_LOGGER .DIALECT_LOGGER .log ( Logger .Level .DEBUG ,
10181018 "JacksonIntegration.isOracleOsonExtensionAvailable(): " +
10191019 JacksonIntegration .isOracleOsonExtensionAvailable ());
1020- DIALECT_MESSAGE_LOGGER .DIALECT_LOGGER .log ( Logger .Level .DEBUG ,
1021- "hibernate.type.json_format_mapper : " + mapperName );
10221020 }
10231021 typeContributions .contributeJdbcType ( OracleJsonJdbcType .INSTANCE );
10241022 typeContributions .contributeJdbcTypeConstructor ( OracleJsonArrayJdbcTypeConstructor .NATIVE_INSTANCE );
0 commit comments