Package org.hibernate

Source Code of org.hibernate.Hibernate

/*
* Hibernate, Relational Persistence for Idiomatic Java
*
* Copyright (c) 2010, Red Hat Inc. or third-party contributors as
* indicated by the @author tags or express copyright attribution
* statements applied by the authors.  All third-party contributions are
* distributed under license by Red Hat Inc.
*
* This copyrighted material is made available to anyone wishing to use, modify,
* copy, or redistribute it subject to the terms and conditions of the GNU
* Lesser General Public License, as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
* or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License
* for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this distribution; if not, write to:
* Free Software Foundation, Inc.
* 51 Franklin Street, Fifth Floor
* Boston, MA  02110-1301  USA
*/
package org.hibernate;

import java.util.Iterator;

import org.hibernate.bytecode.instrumentation.internal.FieldInterceptionHelper;
import org.hibernate.bytecode.instrumentation.spi.FieldInterceptor;
import org.hibernate.collection.spi.PersistentCollection;
import org.hibernate.engine.HibernateIterator;
import org.hibernate.engine.jdbc.LobCreationContext;
import org.hibernate.engine.jdbc.LobCreator;
import org.hibernate.engine.spi.SessionImplementor;
import org.hibernate.proxy.HibernateProxy;
import org.hibernate.proxy.LazyInitializer;

/**
* <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.
   */
  private Hibernate() {
    throw new UnsupportedOperationException();
  }


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

  public static LobCreator getLobCreator(Session session) {
    return getLobCreator( (SessionImplementor) session );
  }

  public static LobCreator getLobCreator(SessionImplementor session) {
    return session.getFactory()
        .getJdbcServices()
        .getLobCreator( session );
  }

  /**
   * Close an <tt>Iterator</tt> created by <tt>iterate()</tt> immediately,
   * instead of waiting until the session is closed or disconnected.
   *
   * @param iterator an <tt>Iterator</tt> created by <tt>iterate()</tt>
   * @throws HibernateException
   * @see org.hibernate.Query#iterate
   * @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 <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) {
   
    Object entity;
    if ( proxy instanceof HibernateProxy ) {
      LazyInitializer li = ( ( HibernateProxy ) proxy ).getHibernateLazyInitializer();
      if ( li.isUninitialized() ) {
        return false;
      }
      else {
        entity = li.getImplementation();
      }
    }
    else {
      entity = proxy;
    }

    if ( FieldInterceptionHelper.isInstrumented( entity ) ) {
      FieldInterceptor interceptor = FieldInterceptionHelper.extractFieldInterceptor( entity );
      return interceptor == null || interceptor.isInitialized( propertyName );
    }
    else {
      return true;
    }
   
  }

}
TOP

Related Classes of org.hibernate.Hibernate

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.