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 ;
99100import org .hibernate .type .descriptor .sql .internal .NamedNativeOrdinalEnumDdlTypeImpl ;
100101import org .hibernate .type .descriptor .sql .spi .DdlTypeRegistry ;
101102import org .hibernate .type .format .jackson .JacksonIntegration ;
103+ import org .hibernate .type .format .jackson .JacksonJsonFormatMapper ;
102104import org .hibernate .type .spi .TypeConfiguration ;
103105
104106import jakarta .persistence .GenerationType ;
109111import static org .hibernate .LockOptions .NO_WAIT ;
110112import static org .hibernate .LockOptions .SKIP_LOCKED ;
111113import static org .hibernate .LockOptions .WAIT_FOREVER ;
114+ import static org .hibernate .cfg .DialectSpecificSettings .ORACLE_OSON_DISABLED ;
112115import static org .hibernate .dialect .DialectLogging .DIALECT_MESSAGE_LOGGER ;
113116import static org .hibernate .dialect .OracleJdbcHelper .getArrayJdbcTypeConstructor ;
114117import static org .hibernate .dialect .OracleJdbcHelper .getNestedTableJdbcTypeConstructor ;
115118import static org .hibernate .exception .spi .TemplatedViolatedConstraintNameExtractor .extractUsingTemplate ;
116119import static org .hibernate .internal .util .JdbcExceptionHelper .extractErrorCode ;
117120import static org .hibernate .internal .util .StringHelper .isEmpty ;
118121import static org .hibernate .internal .util .StringHelper .isNotEmpty ;
122+ import static org .hibernate .internal .util .config .ConfigurationHelper .getBoolean ;
119123import static org .hibernate .query .common .TemporalUnit .DAY ;
120124import static org .hibernate .query .common .TemporalUnit .HOUR ;
121125import static org .hibernate .query .common .TemporalUnit .MINUTE ;
@@ -184,8 +188,7 @@ public class OracleDialect extends Dialect {
184188
185189 private static final DatabaseVersion MINIMUM_VERSION = DatabaseVersion .make ( 19 );
186190
187- private static final String JACKSON_MAPPER_NAME = "jackson" ;
188- private static boolean OracleOsonExtensionUsed = false ;
191+ private boolean OracleOsonExtensionUsed = false ;
189192
190193 private final OracleUserDefinedTypeExporter userDefinedTypeExporter = new OracleUserDefinedTypeExporter ( this );
191194 private final UniqueDelegate uniqueDelegate = new CreateTableUniqueDelegate (this );
@@ -210,9 +213,6 @@ protected void applyAggregateColumnCheck(StringBuilder buf, AggregateColumn aggr
210213 // Is the database accessed using a database service protected by Application Continuity.
211214 protected final boolean applicationContinuity ;
212215
213- // Is the database OSON format should be disabled.
214- protected final boolean isOracleOsonDisabled ;
215-
216216 protected final int driverMajorVersion ;
217217
218218 protected final int driverMinorVersion ;
@@ -227,7 +227,6 @@ public OracleDialect(DatabaseVersion version) {
227227 autonomous = false ;
228228 extended = false ;
229229 applicationContinuity = false ;
230- isOracleOsonDisabled = false ;
231230 driverMajorVersion = 19 ;
232231 driverMinorVersion = 0 ;
233232 }
@@ -241,7 +240,6 @@ public OracleDialect(DialectResolutionInfo info, OracleServerConfiguration serve
241240 autonomous = serverConfiguration .isAutonomous ();
242241 extended = serverConfiguration .isExtended ();
243242 applicationContinuity = serverConfiguration .isApplicationContinuity ();
244- isOracleOsonDisabled = serverConfiguration .isOSONEnabled ();
245243 this .driverMinorVersion = serverConfiguration .getDriverMinorVersion ();
246244 this .driverMajorVersion = serverConfiguration .getDriverMajorVersion ();
247245 }
@@ -258,7 +256,13 @@ public boolean isApplicationContinuity() {
258256 return applicationContinuity ;
259257 }
260258
261- public boolean isOracleOsonDisabled () {return isOracleOsonDisabled ;}
259+ private static boolean isJacksonJsonFormatMapper (ConfigurationService configService ) {
260+ // Mirror the behavior of SessionFactoryOptionsBuilder#determineJsonFormatMapper
261+ final String mapperName = configService .getSetting ( MappingSettings .JSON_FORMAT_MAPPER ,
262+ StandardConverters .STRING ,JacksonJsonFormatMapper .SHORT_NAME );
263+ return JacksonJsonFormatMapper .SHORT_NAME .equalsIgnoreCase ( mapperName )
264+ || mapperName == null && JacksonIntegration .getJsonJacksonFormatMapperOrNull () != null ;
265+ }
262266
263267 @ Override
264268 protected DatabaseVersion getMinimumSupportedVersion () {
@@ -995,20 +999,16 @@ public void contributeTypes(TypeContributions typeContributions, ServiceRegistry
995999
9961000 final ConfigurationService configService = serviceRegistry .requireService ( ConfigurationService .class );
9971001
998-
999- final String mapperName = configService .getSetting ( "hibernate.type.json_format_mapper" ,
1000- StandardConverters .STRING ,JACKSON_MAPPER_NAME );
1001-
10021002 if ( getVersion ().isSameOrAfter ( 21 ) ) {
1003-
1004- if ( !isOracleOsonDisabled () && JacksonIntegration .isOracleOsonExtensionAvailable () && JACKSON_MAPPER_NAME . equalsIgnoreCase ( mapperName )) {
1003+ final boolean osonDisabled = getBoolean ( ORACLE_OSON_DISABLED , configService . getSettings () );
1004+ if ( !osonDisabled && JacksonIntegration .isOracleOsonExtensionAvailable () && isJacksonJsonFormatMapper ( configService )) {
10051005 // We must check that that extension is available and actually used.
10061006 typeContributions .contributeJdbcType ( OracleOsonJacksonJdbcType .INSTANCE );
10071007 typeContributions .contributeJdbcTypeConstructor ( OracleOsonArrayJdbcTypeConstructor .INSTANCE );
10081008
10091009 DIALECT_MESSAGE_LOGGER .DIALECT_LOGGER .log ( Logger .Level .DEBUG ,
10101010 "Oracle OSON Jackson extension used" );
1011- // as we speak this is not supported by OSON extension
1011+ // as we speak, this is not supported by OSON extension
10121012 OracleOsonExtensionUsed = true ;
10131013 }
10141014 else {
@@ -1018,8 +1018,6 @@ public void contributeTypes(TypeContributions typeContributions, ServiceRegistry
10181018 DIALECT_MESSAGE_LOGGER .DIALECT_LOGGER .log ( Logger .Level .DEBUG ,
10191019 "JacksonIntegration.isOracleOsonExtensionAvailable(): " +
10201020 JacksonIntegration .isOracleOsonExtensionAvailable ());
1021- DIALECT_MESSAGE_LOGGER .DIALECT_LOGGER .log ( Logger .Level .DEBUG ,
1022- "hibernate.type.json_format_mapper : " + mapperName );
10231021 }
10241022 typeContributions .contributeJdbcType ( OracleJsonJdbcType .INSTANCE );
10251023 typeContributions .contributeJdbcTypeConstructor ( OracleJsonArrayJdbcTypeConstructor .NATIVE_INSTANCE );
0 commit comments