org.hibernate.type.SerializableType.java Source code

Java tutorial

Introduction

Here is the source code for org.hibernate.type.SerializableType.java

Source

/*
 * 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 {@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();
    }
}