/*
* 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.converter;
import javax.persistence.Convert;
import javax.persistence.Entity;
import javax.persistence.Id;
import org.hibernate.boot.Metadata;
import org.hibernate.boot.MetadataSources;
import org.hibernate.boot.registry.StandardServiceRegistry;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.mapping.PersistentClass;
import org.hibernate.type.StringType;
import org.hibernate.type.Type;
import org.hibernate.type.descriptor.converter.AttributeConverterTypeAdapter;
import org.hibernate.testing.junit4.BaseUnitTestCase;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import static org.hibernate.testing.junit4.ExtraAssertions.assertTyping;
/**
* Test simple application of Convert annotation via XML.
*
* @author Steve Ebersole
*/
public class SimpleXmlOverriddenTest extends BaseUnitTestCase {
private StandardServiceRegistry ssr;
@Before
public void before() {
ssr = new StandardServiceRegistryBuilder().build();
}
@After
public void after() {
if ( ssr != null ) {
StandardServiceRegistryBuilder.destroy( ssr );
}
}
/**
* A baseline test, with an explicit @Convert annotation that should be in effect
*/
@Test
public void baseline() {
Metadata metadata = new MetadataSources( ssr )
.addAnnotatedClass( TheEntity.class )
.buildMetadata();
PersistentClass pc = metadata.getEntityBinding( TheEntity.class.getName() );
Type type = pc.getProperty( "it" ).getType();
AttributeConverterTypeAdapter adapter = assertTyping( AttributeConverterTypeAdapter.class, type );
assertTyping( SillyStringConverter.class, adapter.getAttributeConverter() );
}
/**
* Test outcome of applying overrides via orm.xml, specifically at the attribute level
*/
@Test
public void testDefinitionAtAttributeLevel() {
// NOTE : simple-override.xml applied disable-conversion="true" at the attribute-level
Metadata metadata = new MetadataSources( ssr )
.addAnnotatedClass( TheEntity.class )
.addResource( "org/hibernate/test/converter/simple-override.xml" )
.buildMetadata();
PersistentClass pc = metadata.getEntityBinding( TheEntity.class.getName() );
Type type = pc.getProperty( "it" ).getType();
assertTyping( StringType.class, type );
}
/**
* Test outcome of applying overrides via orm.xml, specifically at the entity level
*/
@Test
public void testDefinitionAtEntityLevel() {
// NOTE : simple-override2.xml applied disable-conversion="true" at the entity-level
Metadata metadata = new MetadataSources( ssr )
.addAnnotatedClass( TheEntity2.class )
.addResource( "org/hibernate/test/converter/simple-override2.xml" )
.buildMetadata();
PersistentClass pc = metadata.getEntityBinding( TheEntity2.class.getName() );
Type type = pc.getProperty( "it" ).getType();
assertTyping( StringType.class, type );
}
@Entity(name="TheEntity")
public static class TheEntity {
@Id
public Integer id;
@Convert(converter = SillyStringConverter.class)
public String it;
}
@Entity(name="TheEntity2")
@Convert( attributeName = "it", converter = SillyStringConverter.class )
public static class TheEntity2 {
@Id
public Integer id;
public String it;
}
}