Skip to content

Commit da0e125

Browse files
committed
HHH-19500 get rid of layer-breaking operations in UserType
- simply delete one which was @Incubating - replace others via deprecation
1 parent bddfc60 commit da0e125

File tree

10 files changed

+79
-57
lines changed

10 files changed

+79
-57
lines changed

hibernate-core/src/main/java/org/hibernate/type/BasicType.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ default MappingType getMappedType() {
4646

4747
@Override
4848
default JavaType<T> getJavaTypeDescriptor() {
49-
return this.getMappedJavaType();
49+
return getMappedJavaType();
5050
}
5151

5252
@Override

hibernate-core/src/main/java/org/hibernate/type/CustomType.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ public CustomType(UserType<J> userType, String[] registrationKeys, TypeConfigura
7777
// When an explicit value converter is given,
7878
// we configure the custom type to use that instead of adapters that delegate to UserType.
7979
// This is necessary to support selecting a column with multiple domain type representations.
80-
jdbcType = userType.getJdbcType( typeConfiguration );
80+
jdbcType = typeConfiguration.getJdbcTypeRegistry().getDescriptor( userType.getSqlType() );
8181
jdbcJavaType = converter.getRelationalJavaType();
8282
//noinspection unchecked
8383
valueExtractor = (ValueExtractor<J>) jdbcType.getExtractor( jdbcJavaType );

hibernate-core/src/main/java/org/hibernate/type/internal/UserTypeJavaTypeWrapper.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ public MutabilityPlan<J> getMutabilityPlan() {
7979

8080
@Override
8181
public JdbcType getRecommendedJdbcType(JdbcTypeIndicators context) {
82-
return userType.getJdbcType( context.getTypeConfiguration() );
82+
return context.getJdbcType( userType.getSqlType() );
8383
}
8484

8585
@Override

hibernate-core/src/main/java/org/hibernate/usertype/BaseUserTypeSupport.java

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -33,19 +33,17 @@ public abstract class BaseUserTypeSupport<T> implements UserType<T> {
3333
protected abstract void resolve(BiConsumer<BasicJavaType<T>, JdbcType> resolutionConsumer);
3434

3535
private void ensureResolved() {
36-
if ( resolved ) {
37-
return;
38-
}
39-
40-
resolve( (javaType,jdbcType) -> {
41-
this.javaType = javaType;
42-
this.jdbcType = jdbcType;
36+
if ( !resolved ) {
37+
resolve( (javaType, jdbcType) -> {
38+
this.javaType = javaType;
39+
this.jdbcType = jdbcType;
4340

44-
jdbcValueExtractor = jdbcType.getExtractor( javaType );
45-
jdbcValueBinder = jdbcType.getBinder( javaType );
41+
jdbcValueExtractor = jdbcType.getExtractor( javaType );
42+
jdbcValueBinder = jdbcType.getBinder( javaType );
4643

47-
resolved = true;
48-
});
44+
resolved = true;
45+
} );
46+
}
4947
}
5048

5149
protected JdbcType jdbcType() {

hibernate-core/src/main/java/org/hibernate/usertype/UserType.java

Lines changed: 47 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818
import org.hibernate.type.descriptor.WrapperOptions;
1919
import org.hibernate.type.descriptor.converter.spi.BasicValueConverter;
2020
import org.hibernate.type.descriptor.jdbc.JdbcType;
21-
import org.hibernate.type.spi.TypeConfiguration;
2221

2322
/**
2423
* This interface should be implemented by user-defined custom types
@@ -310,6 +309,8 @@ default J nullSafeGet(ResultSet rs, int position, SharedSessionContractImplement
310309
* {@link ResultSet#getObject(int, Class)} with the
311310
* given {@code position} and with the
312311
* {@linkplain #returnedClass returned class}.
312+
*
313+
* @since 7.0
313314
*/
314315
default J nullSafeGet(ResultSet rs, int position, WrapperOptions options)
315316
throws SQLException {
@@ -346,6 +347,8 @@ default void nullSafeSet(PreparedStatement st, J value, int position, SharedSess
346347
* {@link PreparedStatement#setObject(int, Object, int)}
347348
* with the given {@code position} and {@code value} and
348349
* with the {@linkplain #getSqlType SQL type}.
350+
*
351+
* @since 7.0
349352
*/
350353
default void nullSafeSet(PreparedStatement st, J value, int position, WrapperOptions options)
351354
throws SQLException {
@@ -480,32 +483,65 @@ default J replace(J detached, J managed, Object owner) {
480483

481484
/**
482485
* The default column length, for use in DDL generation.
486+
*
487+
* @since 7.0
483488
*/
484-
default long getDefaultSqlLength(Dialect dialect, JdbcType jdbcType) {
489+
default long getDefaultSqlLength() {
485490
return Size.DEFAULT_LENGTH;
486491
}
487492

488493
/**
489494
* The default column precision, for use in DDL generation.
495+
*
496+
* @since 7.0
490497
*/
491-
default int getDefaultSqlPrecision(Dialect dialect, JdbcType jdbcType) {
498+
default int getDefaultSqlPrecision() {
492499
return Size.DEFAULT_PRECISION;
493500
}
494501

495502
/**
496503
* The default column scale, for use in DDL generation.
504+
*
505+
* @since 7.0
497506
*/
498-
default int getDefaultSqlScale(Dialect dialect, JdbcType jdbcType) {
507+
default int getDefaultSqlScale() {
499508
return Size.DEFAULT_SCALE;
500509
}
501510

502511
/**
503-
* A mapped {@link JdbcType}. By default, the {@code JdbcType}
504-
* registered under our {@linkplain #getSqlType type code}.
512+
* The default column length, for use in DDL generation.
513+
*
514+
* @since 6.0
515+
* @deprecated This operation is a layer-breaker.
516+
* Use {@link #getDefaultSqlLength()}
505517
*/
506-
@Incubating
507-
default JdbcType getJdbcType(TypeConfiguration typeConfiguration) {
508-
return typeConfiguration.getJdbcTypeRegistry().getDescriptor( getSqlType() );
518+
@Deprecated(since = "7.0", forRemoval = true)
519+
default long getDefaultSqlLength(Dialect dialect, JdbcType jdbcType) {
520+
return getDefaultSqlLength();
521+
}
522+
523+
/**
524+
* The default column precision, for use in DDL generation.
525+
*
526+
* @since 6.0
527+
* @deprecated This operation is a layer-breaker.
528+
* Use {@link #getDefaultSqlPrecision()}
529+
*/
530+
@Deprecated(since = "7.0", forRemoval = true)
531+
default int getDefaultSqlPrecision(Dialect dialect, JdbcType jdbcType) {
532+
return getDefaultSqlPrecision();
533+
}
534+
535+
/**
536+
* The default column scale, for use in DDL generation.
537+
*
538+
* @since 6.0
539+
* @deprecated This operation is a layer-breaker.
540+
* Use {@link #getDefaultSqlScale()}
541+
*/
542+
@Deprecated(since = "7.0", forRemoval = true)
543+
default int getDefaultSqlScale(Dialect dialect, JdbcType jdbcType) {
544+
return getDefaultSqlScale();
509545
}
510546

511547
/**
@@ -519,6 +555,8 @@ default JdbcType getJdbcType(TypeConfiguration typeConfiguration) {
519555
* given by {@link JdbcMapping#getJdbcJavaType()}. Support for multiple
520556
* domain type representations works by converting objects of that type
521557
* to the domain type.
558+
*
559+
* @since 6.0
522560
*/
523561
@Incubating
524562
default BasicValueConverter<J, Object> getValueConverter() {

hibernate-core/src/main/java/org/hibernate/usertype/UserTypeLegacyBridge.java

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@
1010
import org.hibernate.MappingException;
1111
import org.hibernate.annotations.Type;
1212
import org.hibernate.type.BasicType;
13+
import org.hibernate.type.descriptor.java.BasicJavaType;
14+
import org.hibernate.type.descriptor.jdbc.JdbcType;
1315
import org.hibernate.type.spi.TypeConfiguration;
1416
import org.hibernate.type.spi.TypeConfigurationAware;
1517

@@ -44,27 +46,26 @@ public void setTypeConfiguration(TypeConfiguration typeConfiguration) {
4446

4547
@Override
4648
public void setParameterValues(Properties parameters) {
47-
if ( hbmStyleTypeName != null ) {
48-
// assume it was ctor-injected
49-
return;
50-
}
51-
52-
hbmStyleTypeName = parameters.getProperty( TYPE_NAME_PARAM_KEY );
5349
if ( hbmStyleTypeName == null ) {
54-
throw new MappingException( "Missing `@Parameter` for `" + TYPE_NAME_PARAM_KEY + "`" );
50+
hbmStyleTypeName = parameters.getProperty( TYPE_NAME_PARAM_KEY );
51+
if ( hbmStyleTypeName == null ) {
52+
throw new MappingException( "Missing `@Parameter` for `" + TYPE_NAME_PARAM_KEY + "`" );
53+
}
5554
}
55+
// otherwise assume it was ctor-injected
5656
}
5757

5858
@Override
59-
protected void resolve(BiConsumer resolutionConsumer) {
59+
protected void resolve(BiConsumer<BasicJavaType<Object>, JdbcType> resolutionConsumer) {
6060
assert typeConfiguration != null;
6161

62-
final BasicType<Object> registeredType = typeConfiguration
63-
.getBasicTypeRegistry()
64-
.getRegisteredType( hbmStyleTypeName );
62+
final BasicType<Object> registeredType =
63+
typeConfiguration.getBasicTypeRegistry()
64+
.getRegisteredType( hbmStyleTypeName );
6565

6666
resolutionConsumer.accept(
67-
registeredType.getJavaTypeDescriptor(),
67+
(BasicJavaType<Object>)
68+
registeredType.getJavaTypeDescriptor(),
6869
registeredType.getJdbcType()
6970
);
7071
}

hibernate-core/src/main/java/org/hibernate/usertype/UserTypeSupport.java

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import java.util.function.BiConsumer;
88

99
import org.hibernate.type.descriptor.java.BasicJavaType;
10+
import org.hibernate.type.descriptor.java.JavaType;
1011
import org.hibernate.type.descriptor.jdbc.JdbcType;
1112
import org.hibernate.type.spi.TypeConfiguration;
1213
import org.hibernate.type.spi.TypeConfigurationAware;
@@ -15,24 +16,24 @@
1516
* @author Steve Ebersole
1617
*/
1718
public class UserTypeSupport<T> extends BaseUserTypeSupport<T> implements TypeConfigurationAware {
18-
private final Class<?> returnedClass;
19+
private final Class<T> returnedClass;
1920
private final int jdbcTypeCode;
2021

2122
private TypeConfiguration typeConfiguration;
2223

23-
public UserTypeSupport(Class<?> returnedClass, int jdbcTypeCode) {
24+
public UserTypeSupport(Class<T> returnedClass, int jdbcTypeCode) {
2425
this.returnedClass = returnedClass;
2526
this.jdbcTypeCode = jdbcTypeCode;
2627
}
2728

2829
@Override
2930
protected void resolve(BiConsumer<BasicJavaType<T>, JdbcType> resolutionConsumer) {
3031
assert typeConfiguration != null;
31-
32+
final JavaType<T> descriptor =
33+
typeConfiguration.getJavaTypeRegistry()
34+
.getDescriptor( returnedClass );
3235
resolutionConsumer.accept(
33-
(BasicJavaType<T>) typeConfiguration
34-
.getJavaTypeRegistry()
35-
.getDescriptor( returnedClass ),
36+
(BasicJavaType<T>) descriptor,
3637
typeConfiguration
3738
.getJdbcTypeRegistry()
3839
.getDescriptor( jdbcTypeCode )

hibernate-core/src/test/java/org/hibernate/orm/test/EnumType.java

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -67,11 +67,6 @@ public Class<T> getEnumClass() {
6767
return enumClass;
6868
}
6969

70-
@Override
71-
public JdbcType getJdbcType(TypeConfiguration typeConfiguration) {
72-
return jdbcType;
73-
}
74-
7570
/**
7671
* <p>
7772
* An instance of this class is "configured" by a call to {@link #setParameterValues},

hibernate-core/src/test/java/org/hibernate/orm/test/type/contributor/ArrayType.java

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717
import org.hibernate.type.descriptor.java.StringJavaType;
1818
import org.hibernate.type.descriptor.jdbc.JdbcType;
1919
import org.hibernate.type.descriptor.jdbc.VarcharJdbcType;
20-
import org.hibernate.type.spi.TypeConfiguration;
2120
import org.hibernate.usertype.UserType;
2221

2322
/**
@@ -35,11 +34,6 @@ public int getSqlType() {
3534
return jdbcType.getJdbcTypeCode();
3635
}
3736

38-
@Override
39-
public JdbcType getJdbcType(TypeConfiguration typeConfiguration) {
40-
return jdbcType;
41-
}
42-
4337
@Override
4438
public Class<Array> returnedClass() {
4539
return Array.class;

hibernate-envers/src/test/java/org/hibernate/envers/test/integration/customtype/EnumType.java

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -67,11 +67,6 @@ public Class<T> getEnumClass() {
6767
return enumClass;
6868
}
6969

70-
@Override
71-
public JdbcType getJdbcType(TypeConfiguration typeConfiguration) {
72-
return jdbcType;
73-
}
74-
7570
/**
7671
* <p>
7772
* An instance of this class is "configured" by a call to {@link #setParameterValues},

0 commit comments

Comments
 (0)