/*
 * 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 java.io.Serializable;

import org.hibernate.type.descriptor.java.SerializableTypeDescriptor;
import org.hibernate.type.descriptor.sql.VarbinaryTypeDescriptor;

A type that maps between a VARBINARY and Serializable classes.

Notice specifically the 2 forms: The important distinction has to do with locating the appropriate ClassLoader to use during deserialization. In the fist form we are always using the ClassLoader of the JVM (Hibernate will always fallback to trying its classloader as well). The second form is better at targeting the needed ClassLoader actually needed.
Author:Gavin King, Steve Ebersole
/** * A type that maps between a {@link java.sql.Types#VARBINARY VARBINARY} and {@link Serializable} classes. * <p/> * Notice specifically the 2 forms:<ul> * <li>{@link #INSTANCE} indicates a mapping using the {@link Serializable} interface itself.</li> * <li>{@link #SerializableType(Class)} indicates a mapping using the specific class</li> * </ul> * The important distinction has to do with locating the appropriate {@link ClassLoader} to use during deserialization. * In the fist form we are always using the {@link ClassLoader} of the JVM (Hibernate will always fallback to trying * its classloader as well). The second form is better at targeting the needed {@link ClassLoader} actually needed. * * @author Gavin King * @author Steve Ebersole */
public class SerializableType<T extends Serializable> extends AbstractSingleColumnStandardBasicType<T> { public static final SerializableType<Serializable> INSTANCE = new SerializableType<>( Serializable.class ); private final Class<T> serializableClass; public SerializableType(Class<T> serializableClass) { super( VarbinaryTypeDescriptor.INSTANCE, new SerializableTypeDescriptor<T>( serializableClass ) ); this.serializableClass = serializableClass; } public String getName() { return (serializableClass==Serializable.class) ? "serializable" : serializableClass.getName(); } }