/*
* 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.annotations.lob;
import org.hibernate.Session;
import org.hibernate.mapping.PersistentClass;
import org.hibernate.type.SerializableToBlobType;
import org.hibernate.type.Type;
import org.hibernate.testing.DialectChecks;
import org.hibernate.testing.RequiresDialectFeature;
import org.hibernate.testing.junit4.BaseNonConfigCoreFunctionalTestCase;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
/**
* Test type definition for SerializableToBlobType
*
* @author Janario Oliveira
*/
@RequiresDialectFeature( DialectChecks.SupportsExpectedLobUsagePattern.class )
public class SerializableToBlobTypeTest extends BaseNonConfigCoreFunctionalTestCase {
@Test
public void testTypeDefinition() {
PersistentClass pc = metadata().getEntityBinding( 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();
session.beginTransaction();
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 );
session.delete( persistedSerialize );
session.getTransaction().commit();
session.close();
}
@Override
protected Class[] getAnnotatedClasses() {
return new Class[] { EntitySerialize.class };
}
}