|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object org.hibernate.engine.TransactionHelper org.hibernate.id.enhanced.TableGenerator
public class TableGenerator
An enhanced version of table-based id generation.
Unlike the simplistic legacy one (which, btw, was only ever intended for subclassing support) we "segment" the table into multiple values. Thus a single table can actually serve as the persistent storage for multiple independent generators. One approach would be to segment the values by the name of the entity for which we are performing generation, which would mean that we would have a row in the generator table for each entity name. Or any configuration really; the setup is very flexible. In this respect it is very similar to the legacyMultipleHiLoPerTableGenerator
in terms of the
underlying storage structure (namely a single table capable of holding
multiple generator values). The differentiator is, as with
SequenceStyleGenerator
as well, the externalized notion
of an optimizer.
NOTE that by default we use a single row for all generators (based
on DEF_SEGMENT_VALUE
). The configuration parameter
CONFIG_PREFER_SEGMENT_PER_ENTITY
can be used to change that to
instead default to using a row for each entity name.
Configuration parameters:
NAME | DEFAULT | DESCRIPTION |
TABLE_PARAM |
DEF_TABLE |
The name of the table to use to store/retrieve values |
VALUE_COLUMN_PARAM |
DEF_VALUE_COLUMN |
The name of column which holds the sequence value for the given segment |
SEGMENT_COLUMN_PARAM |
DEF_SEGMENT_COLUMN |
The name of the column which holds the segment key |
SEGMENT_VALUE_PARAM |
DEF_SEGMENT_VALUE |
The value indicating which segment is used by this generator; refers to values in the SEGMENT_COLUMN_PARAM column |
SEGMENT_LENGTH_PARAM |
DEF_SEGMENT_LENGTH |
The data length of the SEGMENT_COLUMN_PARAM column; used for schema creation |
INITIAL_PARAM |
DEFAULT_INITIAL_VALUE |
The initial value to be stored for the given segment |
INCREMENT_PARAM |
DEFAULT_INCREMENT_SIZE |
The increment size for the underlying segment; see the discussion on Optimizer for more details. |
OPT_PARAM |
depends on defined increment size | Allows explicit definition of which optimization strategy to use |
Field Summary | |
---|---|
static String |
CONFIG_PREFER_SEGMENT_PER_ENTITY
|
static String |
DEF_SEGMENT_COLUMN
|
static int |
DEF_SEGMENT_LENGTH
|
static String |
DEF_SEGMENT_VALUE
|
static String |
DEF_TABLE
|
static String |
DEF_VALUE_COLUMN
|
static int |
DEFAULT_INCREMENT_SIZE
|
static int |
DEFAULT_INITIAL_VALUE
|
static String |
INCREMENT_PARAM
|
static String |
INITIAL_PARAM
|
static String |
OPT_PARAM
|
static String |
SEGMENT_COLUMN_PARAM
|
static String |
SEGMENT_LENGTH_PARAM
|
static String |
SEGMENT_VALUE_PARAM
|
static String |
TABLE_PARAM
|
static String |
VALUE_COLUMN_PARAM
|
Fields inherited from interface org.hibernate.id.PersistentIdentifierGenerator |
---|
CATALOG, IDENTIFIER_NORMALIZER, PK, SCHEMA, SQL_STATEMENT_LOGGER, TABLE, TABLES |
Fields inherited from interface org.hibernate.id.IdentifierGenerator |
---|
ENTITY_NAME |
Constructor Summary | |
---|---|
TableGenerator()
|
Method Summary | |
---|---|
protected String |
buildInsertQuery()
|
protected String |
buildSelectQuery(Dialect dialect)
|
protected String |
buildUpdateQuery()
|
void |
configure(Type type,
Properties params,
Dialect dialect)
Configure this instance, given the value of parameters specified by the user as <param> elements. |
protected String |
determineDefaultSegmentValue(Properties params)
Used in the cases where determineSegmentValue(java.util.Properties) is unable to
determine the value to use. |
protected String |
determineGeneratorTableName(Properties params,
Dialect dialect)
Determine the table name to use for the generator values. |
protected int |
determineIncrementSize(Properties params)
|
protected int |
determineInitialValue(Properties params)
|
protected String |
determineSegmentColumnName(Properties params,
Dialect dialect)
Determine the name of the column used to indicate the segment for each row. |
protected int |
determineSegmentColumnSize(Properties params)
Determine the size of the segment column
Called during configuration . |
protected String |
determineSegmentValue(Properties params)
Determine the segment value corresponding to this generator instance. |
protected String |
determineValueColumnName(Properties params,
Dialect dialect)
Determine the name of the column in which we will store the generator persistent value. |
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. |
Type |
getIdentifierType()
Type mapping for the identifier. |
int |
getIncrementSize()
The amount of increment to use. |
int |
getInitialValue()
The initial value to use when we find no previous state in the generator table corresponding to our sequence. |
Optimizer |
getOptimizer()
The optimizer being used by this generator. |
String |
getSegmentColumnName()
The name of the column in which we store the segment to which each row belongs. |
String |
getSegmentValue()
The value in segment column which
corresponding to this generator instance. |
int |
getSegmentValueLength()
The size of the segment column in the
underlying table. |
long |
getTableAccessCount()
Getter for property 'tableAccessCount'. |
String |
getTableName()
The name of the table in which we store this generator's persistent state. |
String |
getValueColumnName()
The name of the column in which we store our persistent generator value. |
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 |
---|
public static final String CONFIG_PREFER_SEGMENT_PER_ENTITY
public static final String TABLE_PARAM
public static final String DEF_TABLE
public static final String VALUE_COLUMN_PARAM
public static final String DEF_VALUE_COLUMN
public static final String SEGMENT_COLUMN_PARAM
public static final String DEF_SEGMENT_COLUMN
public static final String SEGMENT_VALUE_PARAM
public static final String DEF_SEGMENT_VALUE
public static final String SEGMENT_LENGTH_PARAM
public static final int DEF_SEGMENT_LENGTH
public static final String INITIAL_PARAM
public static final int DEFAULT_INITIAL_VALUE
public static final String INCREMENT_PARAM
public static final int DEFAULT_INCREMENT_SIZE
public static final String OPT_PARAM
Constructor Detail |
---|
public TableGenerator()
Method Detail |
---|
public Object generatorKey()
generatorKey
in interface PersistentIdentifierGenerator
public final Type getIdentifierType()
public final String getTableName()
public final String getSegmentColumnName()
public final String getSegmentValue()
segment column
which
corresponding to this generator instance. In other words this value
indicates the row in which this generator instance will store values.
public final int getSegmentValueLength()
segment column
in the
underlying table.
NOTE : should really have been called 'segmentColumnLength' or
even better 'segmentColumnSize'
public final String getValueColumnName()
public final int getInitialValue()
public final int getIncrementSize()
optimizer
being used.
public final Optimizer getOptimizer()
public final long getTableAccessCount()
public void configure(Type type, Properties params, Dialect dialect) throws MappingException
configure
in interface Configurable
params
- param values, keyed by parameter name
MappingException
protected String determineGeneratorTableName(Properties params, Dialect dialect)
configuration
.
params
- The params supplied in the generator config (plus some standard useful extras).dialect
- The dialect in effect
getTableName()
protected String determineSegmentColumnName(Properties params, Dialect dialect)
configuration
.
params
- The params supplied in the generator config (plus some standard useful extras).dialect
- The dialect in effect
getSegmentColumnName()
protected String determineValueColumnName(Properties params, Dialect dialect)
configuration
.
params
- The params supplied in the generator config (plus some standard useful extras).dialect
- The dialect in effect
getValueColumnName()
protected String determineSegmentValue(Properties params)
configuration
.
params
- The params supplied in the generator config (plus some standard useful extras).
getSegmentValue()
protected String determineDefaultSegmentValue(Properties params)
determineSegmentValue(java.util.Properties)
is unable to
determine the value to use.
params
- The params supplied in the generator config (plus some standard useful extras).
protected int determineSegmentColumnSize(Properties params)
segment column
Called during configuration
.
params
- The params supplied in the generator config (plus some standard useful extras).
getSegmentValueLength()
protected int determineInitialValue(Properties params)
protected int determineIncrementSize(Properties params)
protected String buildSelectQuery(Dialect dialect)
protected String buildUpdateQuery()
protected String buildInsertQuery()
public Serializable generate(SessionImplementor session, Object obj)
generate
in interface IdentifierGenerator
obj
- the entity or toplevel collection for which the id is being generated
public Serializable doWorkInCurrentTransaction(Connection conn, String sql) throws SQLException
doWorkInCurrentTransaction
in class TransactionHelper
SQLException
public String[] sqlCreateStrings(Dialect dialect) throws HibernateException
sqlCreateStrings
in interface PersistentIdentifierGenerator
dialect
- The dialect against which to generate the create command(s)
HibernateException
- problem creating the create command(s)public String[] sqlDropStrings(Dialect dialect) throws HibernateException
sqlDropStrings
in interface PersistentIdentifierGenerator
dialect
- The dialect against which to generate the drop command(s)
HibernateException
- problem creating the drop command(s)
|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |