Class IdentityGenerator

java.lang.Object
org.hibernate.id.IdentityGenerator
All Implemented Interfaces:
Serializable, Generator, OnExecutionGenerator, BulkInsertionCapableIdentifierGenerator, Configurable, PostInsertIdentifierGenerator

public class IdentityGenerator extends Object implements PostInsertIdentifierGenerator, BulkInsertionCapableIdentifierGenerator
An OnExecutionGenerator that handles IDENTITY/"autoincrement" columns on those databases which support them.

Delegates to the IdentityColumnSupport provided by the dialect.

The actual work involved in retrieving the primary key value is the job of a GeneratedValuesMutationDelegate.

See Also:
Implementation Note:
This also implements the identity generation type in hbm.xml mappings.
  • Constructor Details

    • IdentityGenerator

      public IdentityGenerator()
  • Method Details

    • configure

      public void configure(GeneratorCreationContext creationContext, Properties parameters)
      Description copied from interface: Configurable
      Configure this instance, given the value of parameters specified by the user as XML <param> elements and @Parameter annotations.

      This method is called just once, following instantiation. If this instance also implements ExportableProducer, then this method is always called before ExportableProducer.registerExportables(Database),

      Specified by:
      configure in interface Configurable
      Parameters:
      creationContext - Access to the generator creation context
      parameters - param values, keyed by parameter name
    • getGeneratedType

      public Class<?> getGeneratedType()
      Description copied from interface: Generator
      The Java type of the generated values.
      Specified by:
      getGeneratedType in interface Generator
      Returns:
      the generated type, or null if the type is not known
    • referenceColumnsInSql

      public boolean referenceColumnsInSql(Dialect dialect)
      Description copied from interface: OnExecutionGenerator
      Determines if the columns whose values are generated are included in the column list of the SQL insert or update statement. For example, this method should return:
      Specified by:
      referenceColumnsInSql in interface OnExecutionGenerator
      Returns:
      true if the column is included in the column list of the SQL statement.
    • getReferencedColumnValues

      public String[] getReferencedColumnValues(Dialect dialect)
      Description copied from interface: OnExecutionGenerator
      A SQL expression indicating how to calculate the generated values when the mapped columns are included in the SQL statement. The SQL expressions might be:
      • function calls like current_timestamp or nextval('mysequence'), or
      • syntactic markers like default.
      Specified by:
      getReferencedColumnValues in interface OnExecutionGenerator
      Parameters:
      dialect - The SQL dialect, allowing generation of an expression in dialect-specific SQL.
      Returns:
      The column value to be used in the generated SQL statement.
    • getGeneratedIdentifierDelegate

      public InsertGeneratedIdentifierDelegate getGeneratedIdentifierDelegate(EntityPersister persister)
      Description copied from interface: OnExecutionGenerator
      The InsertGeneratedIdentifierDelegate used to retrieve the generated value if this object is an identifier generator.

      This is ignored by GeneratedValuesProcessor, which handles multiple generators at once. So if this object is not an identifier generator, this method is never called.

      Note that this method arguably breaks the separation of concerns between the generator and coordinating code, by specifying how the generated value should be retrieved.

      The problem solved here is: we want to obtain an insert-generated primary key. But, sadly, without already knowing the primary key, there's no completely-generic way to locate the just-inserted row to obtain it.

      We need one of the following things:

      Alternatively, if the generated id is an identity/"autoincrement" column, we can take advantage of special platform-specific functionality to retrieve it. Taking advantage of the specialness of identity columns is the job of one particular implementation: IdentityGenerator. And the need for customized behavior for identity columns is the reason why this layer-breaking method exists.

      Specified by:
      getGeneratedIdentifierDelegate in interface OnExecutionGenerator