HHH-12443 - Introduce TypeConfiguration
added StandardBasicTypeTemplate
This commit is contained in:
parent
b228a2bc83
commit
ed5afc0877
|
@ -252,7 +252,7 @@ public abstract class EntityType extends AbstractType implements AssociationType
|
||||||
return ReflectHelper.classForName( entityName );
|
return ReflectHelper.classForName( entityName );
|
||||||
}
|
}
|
||||||
catch (ClassNotFoundException cnfe) {
|
catch (ClassNotFoundException cnfe) {
|
||||||
return this.scope.getTypeConfiguration().resolveSessionFactory().getMetamodel().entityPersister( entityName ).
|
return this.scope.getTypeConfiguration().getSessionFactory().getMetamodel().entityPersister( entityName ).
|
||||||
getEntityTuplizer().getMappedClass();
|
getEntityTuplizer().getMappedClass();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,44 @@
|
||||||
|
/*
|
||||||
|
* Hibernate, Relational Persistence for Idiomatic Java
|
||||||
|
*
|
||||||
|
* License: GNU Lesser General Public License (LGPL), version 2.1 or later
|
||||||
|
* See the lgpl.txt file in the root directory or http://www.gnu.org/licenses/lgpl-2.1.html
|
||||||
|
*/
|
||||||
|
package org.hibernate.type;
|
||||||
|
|
||||||
|
import org.hibernate.type.descriptor.java.JavaTypeDescriptor;
|
||||||
|
import org.hibernate.type.descriptor.sql.SqlTypeDescriptor;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A BasicType adapter targeting partial portability to 6.0's type
|
||||||
|
* system changes. In 6.0 the notion of a BasicType is just a
|
||||||
|
* combination of JavaTypeDescriptor/SqlTypeDescriptor.
|
||||||
|
*
|
||||||
|
* @author Steve Ebersole
|
||||||
|
*/
|
||||||
|
@SuppressWarnings("unused")
|
||||||
|
public class StandardBasicTypeTemplate<J> extends AbstractSingleColumnStandardBasicType<J> {
|
||||||
|
private final String name;
|
||||||
|
private final String[] registrationKeys;
|
||||||
|
|
||||||
|
public StandardBasicTypeTemplate(
|
||||||
|
SqlTypeDescriptor sqlTypeDescriptor,
|
||||||
|
JavaTypeDescriptor<J> javaTypeDescriptor,
|
||||||
|
String... registrationKeys) {
|
||||||
|
super( sqlTypeDescriptor, javaTypeDescriptor );
|
||||||
|
this.registrationKeys = registrationKeys;
|
||||||
|
|
||||||
|
this.name = javaTypeDescriptor.getJavaType() == null ? "(map-mode)" : javaTypeDescriptor.getJavaType().getName()
|
||||||
|
+ " -> " + sqlTypeDescriptor.getSqlType();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String[] getRegistrationKeys() {
|
||||||
|
return registrationKeys;
|
||||||
|
}
|
||||||
|
}
|
|
@ -198,10 +198,6 @@ public class TypeConfiguration implements SessionFactoryObserver, Serializable {
|
||||||
// valid while the TypeConfiguration is scoped to SessionFactory
|
// valid while the TypeConfiguration is scoped to SessionFactory
|
||||||
}
|
}
|
||||||
|
|
||||||
public SessionFactoryImplementor resolveSessionFactory() {
|
|
||||||
return scope.resolveSessionFactory();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Encapsulation of lifecycle concerns for a TypeConfiguration, mainly in
|
* Encapsulation of lifecycle concerns for a TypeConfiguration, mainly in
|
||||||
* regards to eventually being associated with a SessionFactory. Goes
|
* regards to eventually being associated with a SessionFactory. Goes
|
||||||
|
@ -317,25 +313,6 @@ public class TypeConfiguration implements SessionFactoryObserver, Serializable {
|
||||||
|
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public SessionFactoryImplementor resolveSessionFactory() {
|
|
||||||
// if ( sessionFactory == null ) {
|
|
||||||
// if ( sessionFactoryName != null || sessionFactoryUuid != null ) {
|
|
||||||
// sessionFactory = (SessionFactoryImplementor) SessionFactoryRegistry.INSTANCE.findSessionFactory(
|
|
||||||
// sessionFactoryUuid,
|
|
||||||
// sessionFactoryName
|
|
||||||
// );
|
|
||||||
//
|
|
||||||
// if ( sessionFactory == null ) {
|
|
||||||
// throw new HibernateException(
|
|
||||||
// "Could not find a SessionFactory [uuid=" + sessionFactoryUuid + ",name=" + sessionFactoryName + "]"
|
|
||||||
// );
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
return sessionFactory;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,64 @@
|
||||||
|
/*
|
||||||
|
* Hibernate, Relational Persistence for Idiomatic Java
|
||||||
|
*
|
||||||
|
* License: GNU Lesser General Public License (LGPL), version 2.1 or later
|
||||||
|
* See the lgpl.txt file in the root directory or http://www.gnu.org/licenses/lgpl-2.1.html
|
||||||
|
*/
|
||||||
|
package org.hibernate.test.type;
|
||||||
|
|
||||||
|
import java.net.URL;
|
||||||
|
|
||||||
|
import org.hibernate.type.BasicType;
|
||||||
|
import org.hibernate.type.StandardBasicTypeTemplate;
|
||||||
|
import org.hibernate.type.descriptor.java.UrlTypeDescriptor;
|
||||||
|
import org.hibernate.type.descriptor.sql.VarcharTypeDescriptor;
|
||||||
|
import org.hibernate.type.spi.TypeConfiguration;
|
||||||
|
|
||||||
|
import org.hibernate.testing.junit4.BaseUnitTestCase;
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
import static org.hamcrest.CoreMatchers.notNullValue;
|
||||||
|
import static org.hamcrest.MatcherAssert.assertThat;
|
||||||
|
import static org.hibernate.testing.junit4.ExtraAssertions.assertTyping;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test making sure StandardBasicTypeTemplate works
|
||||||
|
*
|
||||||
|
* @author Steve Ebersole
|
||||||
|
*/
|
||||||
|
public class StandardBasicTypeTemplateTest extends BaseUnitTestCase {
|
||||||
|
|
||||||
|
public static final String REG_KEY = "validating-url";
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testContributedBasicType() {
|
||||||
|
TypeConfiguration typeConfiguration = new TypeConfiguration();
|
||||||
|
typeConfiguration.getJavaTypeDescriptorRegistry().addDescriptor( ValidatingUrlJavaTypeDescriptor.INSTANCE );
|
||||||
|
typeConfiguration.getBasicTypeRegistry().register(
|
||||||
|
new StandardBasicTypeTemplate<>(
|
||||||
|
VarcharTypeDescriptor.INSTANCE,
|
||||||
|
ValidatingUrlJavaTypeDescriptor.INSTANCE,
|
||||||
|
REG_KEY
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
final BasicType registeredType = typeConfiguration.getBasicTypeRegistry().getRegisteredType( REG_KEY );
|
||||||
|
assertThat( registeredType, notNullValue() );
|
||||||
|
assertTyping( StandardBasicTypeTemplate.class, registeredType );
|
||||||
|
}
|
||||||
|
|
||||||
|
private static class ValidatingUrlJavaTypeDescriptor extends UrlTypeDescriptor {
|
||||||
|
/**
|
||||||
|
* Singleton access
|
||||||
|
*/
|
||||||
|
public static final ValidatingUrlJavaTypeDescriptor INSTANCE = new ValidatingUrlJavaTypeDescriptor();
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public URL fromString(String string) {
|
||||||
|
if ( "invalid".equals( string ) ) {
|
||||||
|
throw new IllegalStateException( "Invalid url" );
|
||||||
|
}
|
||||||
|
return super.fromString( string );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue