/*
* 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.id;
import java.io.Serializable;
import org.hibernate.HibernateException;
import org.hibernate.engine.spi.SharedSessionContractImplementor;
/**
* The general contract between a class that generates unique
* identifiers and the <tt>Session</tt>. It is not intended that
* this interface ever be exposed to the application. It <b>is</b>
* intended that users implement this interface to provide
* custom identifier generation strategies.<br>
* <br>
* Implementors should provide a public default constructor.<br>
* <br>
* Implementations that accept configuration parameters should
* also implement <tt>Configurable</tt>.
* <br>
* Implementors <em>must</em> be thread-safe
*
* @author Gavin King
*
* @see PersistentIdentifierGenerator
* @see Configurable
*/
public interface IdentifierGenerator {
/**
* The configuration parameter holding the entity name
*/
public static final String ENTITY_NAME = "entity_name";
/**
* The configuration parameter holding the JPA entity name
*/
public static final String JPA_ENTITY_NAME = "jpa_entity_name";
/**
* Generate a new identifier.
*
* @param session The session from which the request originates
* @param object the entity or collection (idbag) for which the id is being generated
*
* @return a new identifier
*
* @throws HibernateException Indicates trouble generating the identifier
*/
public Serializable generate(SharedSessionContractImplementor session, Object object) throws HibernateException;
}