Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ default MappingType getMappedType() {

@Override
default JavaType<T> getJavaTypeDescriptor() {
return this.getMappedJavaType();
return getMappedJavaType();
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@ public CustomType(UserType<J> userType, String[] registrationKeys, TypeConfigura
// When an explicit value converter is given,
// we configure the custom type to use that instead of adapters that delegate to UserType.
// This is necessary to support selecting a column with multiple domain type representations.
jdbcType = userType.getJdbcType( typeConfiguration );
jdbcType = typeConfiguration.getJdbcTypeRegistry().getDescriptor( userType.getSqlType() );
jdbcJavaType = converter.getRelationalJavaType();
//noinspection unchecked
valueExtractor = (ValueExtractor<J>) jdbcType.getExtractor( jdbcJavaType );
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@ public MutabilityPlan<J> getMutabilityPlan() {

@Override
public JdbcType getRecommendedJdbcType(JdbcTypeIndicators context) {
return userType.getJdbcType( context.getTypeConfiguration() );
return context.getJdbcType( userType.getSqlType() );
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,19 +33,17 @@ public abstract class BaseUserTypeSupport<T> implements UserType<T> {
protected abstract void resolve(BiConsumer<BasicJavaType<T>, JdbcType> resolutionConsumer);

private void ensureResolved() {
if ( resolved ) {
return;
}

resolve( (javaType,jdbcType) -> {
this.javaType = javaType;
this.jdbcType = jdbcType;
if ( !resolved ) {
resolve( (javaType, jdbcType) -> {
this.javaType = javaType;
this.jdbcType = jdbcType;

jdbcValueExtractor = jdbcType.getExtractor( javaType );
jdbcValueBinder = jdbcType.getBinder( javaType );
jdbcValueExtractor = jdbcType.getExtractor( javaType );
jdbcValueBinder = jdbcType.getBinder( javaType );

resolved = true;
});
resolved = true;
} );
}
}

protected JdbcType jdbcType() {
Expand Down
56 changes: 47 additions & 9 deletions hibernate-core/src/main/java/org/hibernate/usertype/UserType.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@
import org.hibernate.type.descriptor.WrapperOptions;
import org.hibernate.type.descriptor.converter.spi.BasicValueConverter;
import org.hibernate.type.descriptor.jdbc.JdbcType;
import org.hibernate.type.spi.TypeConfiguration;

/**
* This interface should be implemented by user-defined custom types
Expand Down Expand Up @@ -310,6 +309,8 @@
* {@link ResultSet#getObject(int, Class)} with the
* given {@code position} and with the
* {@linkplain #returnedClass returned class}.
*
* @since 7.0
*/
default J nullSafeGet(ResultSet rs, int position, WrapperOptions options)
throws SQLException {
Expand Down Expand Up @@ -346,6 +347,8 @@
* {@link PreparedStatement#setObject(int, Object, int)}
* with the given {@code position} and {@code value} and
* with the {@linkplain #getSqlType SQL type}.
*
* @since 7.0
*/
default void nullSafeSet(PreparedStatement st, J value, int position, WrapperOptions options)
throws SQLException {
Expand Down Expand Up @@ -480,32 +483,65 @@

/**
* The default column length, for use in DDL generation.
*
* @since 7.0
*/
default long getDefaultSqlLength(Dialect dialect, JdbcType jdbcType) {
default long getDefaultSqlLength() {
return Size.DEFAULT_LENGTH;
}

/**
* The default column precision, for use in DDL generation.
*
* @since 7.0
*/
default int getDefaultSqlPrecision(Dialect dialect, JdbcType jdbcType) {
default int getDefaultSqlPrecision() {
return Size.DEFAULT_PRECISION;
}

/**
* The default column scale, for use in DDL generation.
*
* @since 7.0
*/
default int getDefaultSqlScale(Dialect dialect, JdbcType jdbcType) {
default int getDefaultSqlScale() {
return Size.DEFAULT_SCALE;
}

/**
* A mapped {@link JdbcType}. By default, the {@code JdbcType}
* registered under our {@linkplain #getSqlType type code}.
* The default column length, for use in DDL generation.
*
* @since 6.0
* @deprecated This operation is a layer-breaker.
* Use {@link #getDefaultSqlLength()}
*/
@Incubating
default JdbcType getJdbcType(TypeConfiguration typeConfiguration) {
return typeConfiguration.getJdbcTypeRegistry().getDescriptor( getSqlType() );
@Deprecated(since = "7.0", forRemoval = true)
default long getDefaultSqlLength(Dialect dialect, JdbcType jdbcType) {

Check notice

Code scanning / CodeQL

Useless parameter Note

The parameter 'dialect' is never used.

Check notice

Code scanning / CodeQL

Useless parameter Note

The parameter 'jdbcType' is never used.
return getDefaultSqlLength();
}

/**
* The default column precision, for use in DDL generation.
*
* @since 6.0
* @deprecated This operation is a layer-breaker.
* Use {@link #getDefaultSqlPrecision()}
*/
@Deprecated(since = "7.0", forRemoval = true)
default int getDefaultSqlPrecision(Dialect dialect, JdbcType jdbcType) {

Check notice

Code scanning / CodeQL

Useless parameter Note

The parameter 'dialect' is never used.

Check notice

Code scanning / CodeQL

Useless parameter Note

The parameter 'jdbcType' is never used.
return getDefaultSqlPrecision();
}

/**
* The default column scale, for use in DDL generation.
*
* @since 6.0
* @deprecated This operation is a layer-breaker.
* Use {@link #getDefaultSqlScale()}
*/
@Deprecated(since = "7.0", forRemoval = true)
default int getDefaultSqlScale(Dialect dialect, JdbcType jdbcType) {

Check notice

Code scanning / CodeQL

Useless parameter Note

The parameter 'dialect' is never used.

Check notice

Code scanning / CodeQL

Useless parameter Note

The parameter 'jdbcType' is never used.
return getDefaultSqlScale();
}

/**
Expand All @@ -519,6 +555,8 @@
* given by {@link JdbcMapping#getJdbcJavaType()}. Support for multiple
* domain type representations works by converting objects of that type
* to the domain type.
*
* @since 6.0
*/
@Incubating
default BasicValueConverter<J, Object> getValueConverter() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@
import org.hibernate.MappingException;
import org.hibernate.annotations.Type;
import org.hibernate.type.BasicType;
import org.hibernate.type.descriptor.java.BasicJavaType;
import org.hibernate.type.descriptor.jdbc.JdbcType;
import org.hibernate.type.spi.TypeConfiguration;
import org.hibernate.type.spi.TypeConfigurationAware;

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

@Override
public void setParameterValues(Properties parameters) {
if ( hbmStyleTypeName != null ) {
// assume it was ctor-injected
return;
}

hbmStyleTypeName = parameters.getProperty( TYPE_NAME_PARAM_KEY );
if ( hbmStyleTypeName == null ) {
throw new MappingException( "Missing `@Parameter` for `" + TYPE_NAME_PARAM_KEY + "`" );
hbmStyleTypeName = parameters.getProperty( TYPE_NAME_PARAM_KEY );
if ( hbmStyleTypeName == null ) {
throw new MappingException( "Missing `@Parameter` for `" + TYPE_NAME_PARAM_KEY + "`" );
}
}
// otherwise assume it was ctor-injected
}

@Override
protected void resolve(BiConsumer resolutionConsumer) {
protected void resolve(BiConsumer<BasicJavaType<Object>, JdbcType> resolutionConsumer) {
assert typeConfiguration != null;

final BasicType<Object> registeredType = typeConfiguration
.getBasicTypeRegistry()
.getRegisteredType( hbmStyleTypeName );
final BasicType<Object> registeredType =
typeConfiguration.getBasicTypeRegistry()
.getRegisteredType( hbmStyleTypeName );

resolutionConsumer.accept(
registeredType.getJavaTypeDescriptor(),
(BasicJavaType<Object>)
registeredType.getJavaTypeDescriptor(),
registeredType.getJdbcType()
);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
import java.util.function.BiConsumer;

import org.hibernate.type.descriptor.java.BasicJavaType;
import org.hibernate.type.descriptor.java.JavaType;
import org.hibernate.type.descriptor.jdbc.JdbcType;
import org.hibernate.type.spi.TypeConfiguration;
import org.hibernate.type.spi.TypeConfigurationAware;
Expand All @@ -15,24 +16,24 @@
* @author Steve Ebersole
*/
public class UserTypeSupport<T> extends BaseUserTypeSupport<T> implements TypeConfigurationAware {
private final Class<?> returnedClass;
private final Class<T> returnedClass;
private final int jdbcTypeCode;

private TypeConfiguration typeConfiguration;

public UserTypeSupport(Class<?> returnedClass, int jdbcTypeCode) {
public UserTypeSupport(Class<T> returnedClass, int jdbcTypeCode) {
this.returnedClass = returnedClass;
this.jdbcTypeCode = jdbcTypeCode;
}

@Override
protected void resolve(BiConsumer<BasicJavaType<T>, JdbcType> resolutionConsumer) {
assert typeConfiguration != null;

final JavaType<T> descriptor =
typeConfiguration.getJavaTypeRegistry()
.getDescriptor( returnedClass );
resolutionConsumer.accept(
(BasicJavaType<T>) typeConfiguration
.getJavaTypeRegistry()
.getDescriptor( returnedClass ),
(BasicJavaType<T>) descriptor,
typeConfiguration
.getJdbcTypeRegistry()
.getDescriptor( jdbcTypeCode )
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -67,11 +67,6 @@ public Class<T> getEnumClass() {
return enumClass;
}

@Override
public JdbcType getJdbcType(TypeConfiguration typeConfiguration) {
return jdbcType;
}

/**
* <p>
* An instance of this class is "configured" by a call to {@link #setParameterValues},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@
import org.hibernate.type.descriptor.java.StringJavaType;
import org.hibernate.type.descriptor.jdbc.JdbcType;
import org.hibernate.type.descriptor.jdbc.VarcharJdbcType;
import org.hibernate.type.spi.TypeConfiguration;
import org.hibernate.usertype.UserType;

/**
Expand All @@ -35,11 +34,6 @@ public int getSqlType() {
return jdbcType.getJdbcTypeCode();
}

@Override
public JdbcType getJdbcType(TypeConfiguration typeConfiguration) {
return jdbcType;
}

@Override
public Class<Array> returnedClass() {
return Array.class;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -67,11 +67,6 @@ public Class<T> getEnumClass() {
return enumClass;
}

@Override
public JdbcType getJdbcType(TypeConfiguration typeConfiguration) {
return jdbcType;
}

/**
* <p>
* An instance of this class is "configured" by a call to {@link #setParameterValues},
Expand Down