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 legacy
org. 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 |
| Modifier and Type | Field and Description |
|---|---|
| private long | |
| public static final String | |
| public static final String | |
| public static final int | |
| public static final String | |
| public static final String | |
| public static final String | |
| public static final int | |
| public static final int | |
| private Type | |
| public static final String | |
| private int | |
| public static final String | |
| private int | |
| private String | |
| private static final Logger | |
| public static final String | |
| private Optimizer | |
| public static final String | |
| public static final String | |
| public static final String | |
| private String | |
| private String | |
| private int | |
| private String | |
| public static final String | |
| private String | |
| private String | |
| public static final String | |
| private String |
| Access | Constructor and Description |
|---|---|
| public |
| Modifier and Type | Method and Description |
|---|---|
| protected String | |
| protected String | |
| protected String | |
| public void | configure(Type type, Properties
param values, keyed by parameter name params, Dialect dialect)Implements org. |
| protected String | Returns: The default segment value to use.The params supplied in the generator config (plus some standard useful extras). params)Used in the cases where |
| protected String | Returns: The table name to use.The params supplied in the generator config (plus some standard useful extras). params, Dialect The dialect in effect dialect)Determine the table name to use for the generator values. |
| protected int | |
| protected int | |
| protected String | Returns: The name of the segment columnThe params supplied in the generator config (plus some standard useful extras). params, Dialect The dialect in effect dialect)Determine the name of the column used to indicate the segment for each row. |
| protected int | Returns: The size of the segment columnThe params supplied in the generator config (plus some standard useful extras). params)Determine the size of the
Called during |
| protected String | Returns: The name of the value columnThe params supplied in the generator config (plus some standard useful extras). params)Determine the segment value corresponding to this generator instance. |
| protected String | Returns: The name of the value columnThe params supplied in the generator config (plus some standard useful extras). params, Dialect The dialect in effect dialect)Determine the name of the column in which we will store the generator persistent value. |
| public Serializable | doWorkInCurrentTransaction(Connection conn, String sql)
Implements abstract org. |
| public synchronized Serializable | generate(final SessionImplementor session, Object
the entity or toplevel collection for which the id is being generated obj)Implements org. |
| public Object | generatorKey()
Implements org. |
| public final Type | |
| public final int | |
| public final int | Returns: The initial value to use.The initial value to use when we find no previous state in the generator table corresponding to our sequence. |
| public final Optimizer | |
| public final String | Returns: The segment column nameThe name of the column in which we store the segment to which each row belongs. |
| public final String | Returns: The segment value for this generator instance.The value in |
| public final int | Returns: the column size.The size of the |
| public final long | Returns: Value for property 'tableAccessCount'.Getter for property 'tableAccessCount'. |
| public final String | Returns: The table name.The name of the table in which we store this generator's persistent state. |
| public final String | Returns: The name of the value column.The name of the column in which we store our persistent generator value. |
| public String[] | sqlCreateStrings(Dialect
The dialect against which to generate the create command(s) dialect)Implements org. |
| public String[] | sqlDropStrings(Dialect
The dialect against which to generate the drop command(s) dialect)Implements org. |
| accessCount | back to summary |
|---|---|
| private long accessCount | |
| CONFIG_PREFER_SEGMENT_PER_ENTITY | back to summary |
|---|---|
| public static final String CONFIG_PREFER_SEGMENT_PER_ENTITY | |
| DEF_SEGMENT_COLUMN | back to summary |
|---|---|
| public static final String DEF_SEGMENT_COLUMN | |
| DEF_SEGMENT_LENGTH | back to summary |
|---|---|
| public static final int DEF_SEGMENT_LENGTH | |
| DEF_SEGMENT_VALUE | back to summary |
|---|---|
| public static final String DEF_SEGMENT_VALUE | |
| DEF_TABLE | back to summary |
|---|---|
| public static final String DEF_TABLE | |
| DEF_VALUE_COLUMN | back to summary |
|---|---|
| public static final String DEF_VALUE_COLUMN | |
| DEFAULT_INCREMENT_SIZE | back to summary |
|---|---|
| public static final int DEFAULT_INCREMENT_SIZE | |
| DEFAULT_INITIAL_VALUE | back to summary |
|---|---|
| public static final int DEFAULT_INITIAL_VALUE | |
| identifierType | back to summary |
|---|---|
| private Type identifierType | |
| INCREMENT_PARAM | back to summary |
|---|---|
| public static final String INCREMENT_PARAM | |
| incrementSize | back to summary |
|---|---|
| private int incrementSize | |
| INITIAL_PARAM | back to summary |
|---|---|
| public static final String INITIAL_PARAM | |
| initialValue | back to summary |
|---|---|
| private int initialValue | |
| insertQuery | back to summary |
|---|---|
| private String insertQuery | |
| log | back to summary |
|---|---|
| private static final Logger log | |
| OPT_PARAM | back to summary |
|---|---|
| public static final String OPT_PARAM | |
| optimizer | back to summary |
|---|---|
| private Optimizer optimizer | |
| SEGMENT_COLUMN_PARAM | back to summary |
|---|---|
| public static final String SEGMENT_COLUMN_PARAM | |
| SEGMENT_LENGTH_PARAM | back to summary |
|---|---|
| public static final String SEGMENT_LENGTH_PARAM | |
| SEGMENT_VALUE_PARAM | back to summary |
|---|---|
| public static final String SEGMENT_VALUE_PARAM | |
| segmentColumnName | back to summary |
|---|---|
| private String segmentColumnName | |
| segmentValue | back to summary |
|---|---|
| private String segmentValue | |
| segmentValueLength | back to summary |
|---|---|
| private int segmentValueLength | |
| selectQuery | back to summary |
|---|---|
| private String selectQuery | |
| TABLE_PARAM | back to summary |
|---|---|
| public static final String TABLE_PARAM | |
| tableName | back to summary |
|---|---|
| private String tableName | |
| updateQuery | back to summary |
|---|---|
| private String updateQuery | |
| VALUE_COLUMN_PARAM | back to summary |
|---|---|
| public static final String VALUE_COLUMN_PARAM | |
| valueColumnName | back to summary |
|---|---|
| private String valueColumnName | |
| TableGenerator | back to summary |
|---|---|
| public TableGenerator() | |
| buildInsertQuery | back to summary |
|---|---|
| protected String buildInsertQuery() | |
| buildSelectQuery | back to summary |
|---|---|
| protected String buildSelectQuery(Dialect dialect) | |
| buildUpdateQuery | back to summary |
|---|---|
| protected String buildUpdateQuery() | |
| configure | back to summary |
|---|---|
| public void configure(Type type, Properties params, Dialect dialect) throws MappingException Implements org. Doc from org. Configure this instance, given the value of parameters specified by the user as <param> elements. This method is called just once, following instantiation.
| |
| determineDefaultSegmentValue | back to summary |
|---|---|
| protected String determineDefaultSegmentValue(Properties params) Used in the cases where
| |
| determineGeneratorTableName | back to summary |
|---|---|
| protected String determineGeneratorTableName(Properties params, Dialect dialect) Determine the table name to use for the generator values.
Called during
| |
| determineIncrementSize | back to summary |
|---|---|
| protected int determineIncrementSize(Properties params) | |
| determineInitialValue | back to summary |
|---|---|
| protected int determineInitialValue(Properties params) | |
| determineSegmentColumnName | back to summary |
|---|---|
| protected String determineSegmentColumnName(Properties params, Dialect dialect) Determine the name of the column used to indicate the segment for each row. This column acts as the primary key.
Called during
| |
| determineSegmentColumnSize | back to summary |
|---|---|
| protected int determineSegmentColumnSize(Properties params) Determine the size of the
Called during
| |
| determineSegmentValue | back to summary |
|---|---|
| protected String determineSegmentValue(Properties params) Determine the segment value corresponding to this generator instance.
Called during
| |
| determineValueColumnName | back to summary |
|---|---|
| protected String determineValueColumnName(Properties params, Dialect dialect) Determine the name of the column in which we will store the generator persistent value.
Called during
| |
| doWorkInCurrentTransaction | back to summary |
|---|---|
| public Serializable doWorkInCurrentTransaction(Connection conn, String sql) throws SQLException Implements abstract org. Doc from org. The work to be done | |
| generate | back to summary |
|---|---|
| public synchronized Serializable generate(final SessionImplementor session, Object obj) Implements org. Doc from org. Generate a new identifier.
| |
| generatorKey | back to summary |
|---|---|
| public Object generatorKey() Implements org. Doc from org. Return a key unique to the underlying database objects. Prevents us from trying to create/remove them multiple times.
| |
| getIdentifierType | back to summary |
|---|---|
| public final Type getIdentifierType() Type mapping for the identifier.
| |
| getIncrementSize | back to summary |
|---|---|
| public final int getIncrementSize() The amount of increment to use. The exact implications of this
depends on the
| |
| getInitialValue | back to summary |
|---|---|
| public final int getInitialValue() The initial value to use when we find no previous state in the generator table corresponding to our sequence.
| |
| getOptimizer | back to summary |
|---|---|
| public final Optimizer getOptimizer() The optimizer being used by this generator.
| |
| getSegmentColumnName | back to summary |
|---|---|
| public final String getSegmentColumnName() The name of the column in which we store the segment to which each row belongs. The value here acts as PK.
| |
| getSegmentValue | back to summary |
|---|---|
| public final String getSegmentValue() The value in
| |
| getSegmentValueLength | back to summary |
|---|---|
| public final int getSegmentValueLength() The size of the Note : should really have been called 'segmentColumnLength' or even better 'segmentColumnSize'
| |
| getTableAccessCount | back to summary |
|---|---|
| public final long getTableAccessCount() Getter for property 'tableAccessCount'. Only really useful for unit test assertions.
| |
| getTableName | back to summary |
|---|---|
| public final String getTableName() The name of the table in which we store this generator's persistent state.
| |
| getValueColumnName | back to summary |
|---|---|
| public final String getValueColumnName() The name of the column in which we store our persistent generator value.
| |
| sqlCreateStrings | back to summary |
|---|---|
| public String[] sqlCreateStrings(Dialect dialect) throws HibernateException Implements org. Doc from org. The SQL required to create the underlying database objects.
| |
| sqlDropStrings | back to summary |
|---|---|
| public String[] sqlDropStrings(Dialect dialect) throws HibernateException Implements org. Doc from org. The SQL required to remove the underlying database objects.
| |