org.hibernate.id
Class MultipleHiLoPerTableGenerator

java.lang.Object
  extended by org.hibernate.engine.TransactionHelper
      extended by org.hibernate.id.MultipleHiLoPerTableGenerator
All Implemented Interfaces:
Configurable, IdentifierGenerator, PersistentIdentifierGenerator

public class MultipleHiLoPerTableGenerator
extends TransactionHelper
implements PersistentIdentifierGenerator, Configurable

A hilo IdentifierGenerator that returns a Long, constructed using a hi/lo algorithm. The hi value MUST be fetched in a seperate transaction to the Session transaction so the generator must be able to obtain a new connection and commit it. Hence this implementation may not be used when the user is supplying connections. In this case a SequenceHiLoGenerator would be a better choice (where supported).

A hilo IdentifierGenerator that uses a database table to store the last generated values. A table can contains several hi values. They are distinct from each other through a key

This implementation is not compliant with a user connection

Allowed parameters (all of them are optional):

Author:
Emmanuel Bernard, Klaus Richarz.

Field Summary
static String DEFAULT_TABLE
           
static String ID_TABLE
           
static String MAX_LO
           
static String PK_COLUMN_NAME
           
static String PK_LENGTH_NAME
           
static String PK_VALUE_NAME
           
static String VALUE_COLUMN_NAME
           
 
Fields inherited from interface org.hibernate.id.PersistentIdentifierGenerator
CATALOG, PK, SCHEMA, SQL, TABLE, TABLES
 
Fields inherited from interface org.hibernate.id.IdentifierGenerator
ENTITY_NAME
 
Constructor Summary
MultipleHiLoPerTableGenerator()
           
 
Method Summary
 void configure(Type type, Properties params, Dialect dialect)
          Configure this instance, given the value of parameters specified by the user as <param> elements.
 Serializable doWorkInCurrentTransaction(Connection conn, String sql)
          The work to be done
 Serializable generate(SessionImplementor session, Object obj)
          Generate a new identifier.
 Object generatorKey()
          Return a key unique to the underlying database objects.
 String[] sqlCreateStrings(Dialect dialect)
          The SQL required to create the underlying database objects.
 String[] sqlDropStrings(Dialect dialect)
          The SQL required to remove the underlying database objects.
 
Methods inherited from class org.hibernate.engine.TransactionHelper
doWorkInNewTransaction
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

ID_TABLE

public static final String ID_TABLE
See Also:
Constant Field Values

PK_COLUMN_NAME

public static final String PK_COLUMN_NAME
See Also:
Constant Field Values

PK_VALUE_NAME

public static final String PK_VALUE_NAME
See Also:
Constant Field Values

VALUE_COLUMN_NAME

public static final String VALUE_COLUMN_NAME
See Also:
Constant Field Values

PK_LENGTH_NAME

public static final String PK_LENGTH_NAME
See Also:
Constant Field Values

DEFAULT_TABLE

public static final String DEFAULT_TABLE
See Also:
Constant Field Values

MAX_LO

public static final String MAX_LO
See Also:
Constant Field Values
Constructor Detail

MultipleHiLoPerTableGenerator

public MultipleHiLoPerTableGenerator()
Method Detail

sqlCreateStrings

public String[] sqlCreateStrings(Dialect dialect)
                          throws HibernateException
Description copied from interface: PersistentIdentifierGenerator
The SQL required to create the underlying database objects.

Specified by:
sqlCreateStrings in interface PersistentIdentifierGenerator
Returns:
String[]
Throws:
HibernateException

sqlDropStrings

public String[] sqlDropStrings(Dialect dialect)
                        throws HibernateException
Description copied from interface: PersistentIdentifierGenerator
The SQL required to remove the underlying database objects.

Specified by:
sqlDropStrings in interface PersistentIdentifierGenerator
Returns:
String
Throws:
HibernateException

generatorKey

public Object generatorKey()
Description copied from interface: PersistentIdentifierGenerator
Return a key unique to the underlying database objects. Prevents us from trying to create/remove them multiple times.

Specified by:
generatorKey in interface PersistentIdentifierGenerator
Returns:
Object an identifying key for this generator

doWorkInCurrentTransaction

public Serializable doWorkInCurrentTransaction(Connection conn,
                                               String sql)
                                        throws SQLException
Description copied from class: TransactionHelper
The work to be done

Specified by:
doWorkInCurrentTransaction in class TransactionHelper
Throws:
SQLException

generate

public Serializable generate(SessionImplementor session,
                             Object obj)
                      throws HibernateException
Description copied from interface: IdentifierGenerator
Generate a new identifier.

Specified by:
generate in interface IdentifierGenerator
obj - the entity or toplevel collection for which the id is being generated
Returns:
a new identifier
Throws:
HibernateException

configure

public void configure(Type type,
                      Properties params,
                      Dialect dialect)
               throws MappingException
Description copied from interface: Configurable
Configure this instance, given the value of parameters specified by the user as <param> elements. This method is called just once, following instantiation.

Specified by:
configure in interface Configurable
params - param values, keyed by parameter name
Throws:
MappingException