package org.hibernate.test.annotations.lob;
import static org.junit.Assert.assertEquals;
import org.hibernate.Session;
import org.hibernate.cfg.Configuration;
import org.hibernate.mapping.PersistentClass;
import org.hibernate.testing.junit4.BaseCoreFunctionalTestCase;
import org.hibernate.type.SerializableToBlobType;
import org.hibernate.type.Type;
import org.junit.Test;
/**
* Test type definition for SerializableToBlobType
*
* @author Janario Oliveira
*/
public class SerializableToBlobTypeTest extends BaseCoreFunctionalTestCase {
@Test
public void testTypeDefinition() {
Configuration cfg = configuration();
PersistentClass pc = cfg.getClassMapping( EntitySerialize.class.getName() );
// explicitLob of SerializableToBlobType
Type explicitLobType = pc.getProperty( "explicitLob" ).getType();
assertEquals( ExplicitSerializable.class, explicitLobType.getReturnedClass() );
assertEquals( SerializableToBlobType.class.getName(), explicitLobType.getName() );
// explicit of ExplicitSerializableType
Type explicitType = pc.getProperty( "explicit" ).getType();
assertEquals( ExplicitSerializable.class, explicitType.getReturnedClass() );
assertEquals( ExplicitSerializableType.class.getName(), explicitType.getName() );
// implicit of ImplicitSerializableType
Type implicitType = pc.getProperty( "implicit" ).getType();
assertEquals( ImplicitSerializable.class, implicitType.getReturnedClass() );
assertEquals( ImplicitSerializableType.class.getName(), implicitType.getName() );
// explicitOverridingImplicit ExplicitSerializableType overrides ImplicitSerializableType
Type overrideType = pc.getProperty( "explicitOverridingImplicit" ).getType();
assertEquals( ImplicitSerializable.class, overrideType.getReturnedClass() );
assertEquals( ExplicitSerializableType.class.getName(), overrideType.getName() );
}
@Test
public void testPersist() {
EntitySerialize entitySerialize = new EntitySerialize();
entitySerialize.explicitLob = new ExplicitSerializable();
entitySerialize.explicitLob.value = "explicitLob";
entitySerialize.explicitLob.defaultValue = "defaultExplicitLob";
entitySerialize.explicit = new ExplicitSerializable();
entitySerialize.explicit.value = "explicit";
entitySerialize.implicit = new ImplicitSerializable();
entitySerialize.implicit.value = "implicit";
entitySerialize.explicitOverridingImplicit = new ImplicitSerializable();
entitySerialize.explicitOverridingImplicit.value = "explicitOverridingImplicit";
Session session = openSession();
session.getTransaction().begin();
session.persist( entitySerialize );
session.getTransaction().commit();
session.close();
session = openSession();
EntitySerialize persistedSerialize = (EntitySerialize) session.get( EntitySerialize.class, entitySerialize.id );
assertEquals( "explicitLob", persistedSerialize.explicitLob.value );
assertEquals( "explicit", persistedSerialize.explicit.value );
assertEquals( "implicit", persistedSerialize.implicit.value );
assertEquals( "explicitOverridingImplicit", persistedSerialize.explicitOverridingImplicit.value );
assertEquals( "defaultExplicitLob", persistedSerialize.explicitLob.defaultValue );
assertEquals( "EXPLICIT", persistedSerialize.explicit.defaultValue );
assertEquals( "IMPLICIT", persistedSerialize.implicit.defaultValue );
assertEquals( "EXPLICIT", persistedSerialize.explicitOverridingImplicit.defaultValue );
session.close();
}
@Override
protected Class[] getAnnotatedClasses() {
return new Class[] { EntitySerialize.class };
}
}