/*
 * 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;

import java.util.Iterator;

import org.hibernate.bytecode.enhance.spi.interceptor.LazyAttributeLoadingInterceptor;
import org.hibernate.collection.spi.PersistentCollection;
import org.hibernate.engine.HibernateIterator;
import org.hibernate.engine.jdbc.LobCreator;
import org.hibernate.engine.jdbc.spi.JdbcServices;
import org.hibernate.engine.spi.PersistentAttributeInterceptable;
import org.hibernate.engine.spi.PersistentAttributeInterceptor;
import org.hibernate.engine.spi.SessionImplementor;
import org.hibernate.engine.spi.SharedSessionContractImplementor;
import org.hibernate.proxy.HibernateProxy;
import org.hibernate.proxy.LazyInitializer;

  • Provides access to the full range of Hibernate built-in types. Type instances may be used to bind values to query parameters.
  • A factory for new Blobs and Clobs.
  • Defines static methods for manipulation of proxies.
Author:Gavin King
See Also:
/** * <ul> * <li>Provides access to the full range of Hibernate built-in types. <tt>Type</tt> * instances may be used to bind values to query parameters. * <li>A factory for new <tt>Blob</tt>s and <tt>Clob</tt>s. * <li>Defines static methods for manipulation of proxies. * </ul> * * @author Gavin King * @see java.sql.Clob * @see java.sql.Blob * @see org.hibernate.type.Type */
public final class Hibernate {
Cannot be instantiated.
/** * Cannot be instantiated. */
private Hibernate() { throw new UnsupportedOperationException(); }
Force initialization of a proxy or persistent collection.

Note: This only ensures intialization of a proxy object or collection; it is not guaranteed that the elements INSIDE the collection will be initialized/materialized.
Params:
  • proxy – a persistable object, proxy, persistent collection or null
Throws:
  • HibernateException – if we can't initialize the proxy at this time, eg. the Session was closed
/** * Force initialization of a proxy or persistent collection. * <p/> * Note: This only ensures intialization of a proxy object or collection; * it is not guaranteed that the elements INSIDE the collection will be initialized/materialized. * * @param proxy a persistable object, proxy, persistent collection or <tt>null</tt> * @throws HibernateException if we can't initialize the proxy at this time, eg. the <tt>Session</tt> was closed */
public static void initialize(Object proxy) throws HibernateException { if ( proxy == null ) { return; } if ( proxy instanceof HibernateProxy ) { ( (HibernateProxy) proxy ).getHibernateLazyInitializer().initialize(); } else if ( proxy instanceof PersistentCollection ) { ( (PersistentCollection) proxy ).forceInitialization(); } }
Check if the proxy or persistent collection is initialized.
Params:
  • proxy – a persistable object, proxy, persistent collection or null
Returns:true if the argument is already initialized, or is not a proxy or collection
/** * Check if the proxy or persistent collection is initialized. * * @param proxy a persistable object, proxy, persistent collection or <tt>null</tt> * @return true if the argument is already initialized, or is not a proxy or collection */
@SuppressWarnings("SimplifiableIfStatement") public static boolean isInitialized(Object proxy) { if ( proxy instanceof HibernateProxy ) { return !( (HibernateProxy) proxy ).getHibernateLazyInitializer().isUninitialized(); } else if ( proxy instanceof PersistentCollection ) { return ( (PersistentCollection) proxy ).wasInitialized(); } else { return true; } }
Get the true, underlying class of a proxied persistent class. This operation will initialize a proxy by side-effect.
Params:
  • proxy – a persistable object or proxy
Throws:
Returns:the true class of the instance
/** * Get the true, underlying class of a proxied persistent class. This operation * will initialize a proxy by side-effect. * * @param proxy a persistable object or proxy * @return the true class of the instance * @throws HibernateException */
public static Class getClass(Object proxy) { if ( proxy instanceof HibernateProxy ) { return ( (HibernateProxy) proxy ).getHibernateLazyInitializer() .getImplementation() .getClass(); } else { return proxy.getClass(); } }
Obtain a lob creator for the given session.
Params:
  • session – The session for which to obtain a lob creator
Returns:The log creator reference
/** * Obtain a lob creator for the given session. * * @param session The session for which to obtain a lob creator * * @return The log creator reference */
public static LobCreator getLobCreator(Session session) { return getLobCreator( (SessionImplementor) session ); }
Obtain a lob creator for the given session.
Params:
  • session – The session for which to obtain a lob creator
Returns:The log creator reference
/** * Obtain a lob creator for the given session. * * @param session The session for which to obtain a lob creator * * @return The log creator reference */
public static LobCreator getLobCreator(SharedSessionContractImplementor session) { return session.getFactory() .getServiceRegistry() .getService( JdbcServices.class ) .getLobCreator( session ); }
Obtain a lob creator for the given session.
Params:
  • session – The session for which to obtain a lob creator
Returns:The log creator reference
/** * Obtain a lob creator for the given session. * * @param session The session for which to obtain a lob creator * * @return The log creator reference */
public static LobCreator getLobCreator(SessionImplementor session) { return session.getFactory() .getServiceRegistry() .getService( JdbcServices.class ) .getLobCreator( session ); }
Close an Iterator instances obtained from Query.iterate() immediately instead of waiting until the session is closed or disconnected.
Params:
  • iterator – an Iterator created by iterate()
Throws:
See Also:
/** * Close an {@link Iterator} instances obtained from {@link org.hibernate.Query#iterate()} immediately * instead of waiting until the session is closed or disconnected. * * @param iterator an Iterator created by iterate() * * @throws HibernateException Indicates a problem closing the Hibernate iterator. * @throws IllegalArgumentException If the Iterator is not a "Hibernate Iterator". * * @see Query#iterate() */
public static void close(Iterator iterator) throws HibernateException { if ( iterator instanceof HibernateIterator ) { ( (HibernateIterator) iterator ).close(); } else { throw new IllegalArgumentException( "not a Hibernate iterator" ); } }
Check if the property is initialized. If the named property does not exist or is not persistent, this method always returns true.
Params:
  • proxy – The potential proxy
  • propertyName – the name of a persistent attribute of the object
Returns:true if the named property of the object is not listed as uninitialized; false otherwise
/** * Check if the property is initialized. If the named property does not exist * or is not persistent, this method always returns <tt>true</tt>. * * @param proxy The potential proxy * @param propertyName the name of a persistent attribute of the object * @return true if the named property of the object is not listed as uninitialized; false otherwise */
public static boolean isPropertyInitialized(Object proxy, String propertyName) { final Object entity; if ( proxy instanceof HibernateProxy ) { final LazyInitializer li = ( (HibernateProxy) proxy ).getHibernateLazyInitializer(); if ( li.isUninitialized() ) { return false; } else { entity = li.getImplementation(); } } else { entity = proxy; } if ( entity instanceof PersistentAttributeInterceptable ) { PersistentAttributeInterceptor interceptor = ( (PersistentAttributeInterceptable) entity ).$$_hibernate_getInterceptor(); if ( interceptor != null && interceptor instanceof LazyAttributeLoadingInterceptor ) { return ( (LazyAttributeLoadingInterceptor) interceptor ).isAttributeLoaded( propertyName ); } } return true; }
Unproxies a HibernateProxy. If the proxy is uninitialized, it automatically triggers an initialization. In case the supplied object is null or not a proxy, the object will be returned as-is.
Params:
Returns:the proxy's underlying implementation object, or the supplied object otherwise
/** * Unproxies a {@link HibernateProxy}. If the proxy is uninitialized, it automatically triggers an initialization. * In case the supplied object is null or not a proxy, the object will be returned as-is. * * @param proxy the {@link HibernateProxy} to be unproxied * @return the proxy's underlying implementation object, or the supplied object otherwise */
public static Object unproxy(Object proxy) { if ( proxy instanceof HibernateProxy ) { HibernateProxy hibernateProxy = (HibernateProxy) proxy; LazyInitializer initializer = hibernateProxy.getHibernateLazyInitializer(); return initializer.getImplementation(); } else { return proxy; } } }