Class SelectGenerator

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

A generator that selects the just-inserted row to determine the column value assigned by the database. The correct row is located using a unique key of the entity, either:
  • the mapped NaturalId of the entity, or
  • a property specified using the parameter named "key".

The second approach is provided for backward compatibility with older versions of Hibernate.

This generator is intended for use with primary keys assigned by a database trigger or something similar, for example:

 @Entity @Table(name="TableWithPKAssignedByTrigger")
 @GenericGenerator(name = "triggered", type = SelectGenerator.class)
 public class TriggeredEntity {
     @Id @GeneratedValue(generator = "triggered")
     private Long id;

     @NaturalId
     private String name;

     ...
 }
 

However, after a very long working life, this generator is now handing over its work to GeneratedGeneration, and the above code may be written as:

 @Entity @Table(name="TableWithPKAssignedByTrigger")
 public class TriggeredEntity {
     @Id @Generated
     private Long id;

     @NaturalId
     private String name;

     ...
 }
 

For tables with identity/autoincrement columns, use IdentityGenerator.

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

Arguably, this class breaks the natural separation of responsibility between the generator and the coordinating code, since its role is to specify how the generated value is retrieved.

Author:
Gavin King
See Also:
  • Field Details

  • Constructor Details

    • SelectGenerator

      public SelectGenerator()
  • Method Details

    • configure

      public void configure(Type type, Properties parameters, ServiceRegistry serviceRegistry)
      Description copied from interface: PostInsertIdentifierGenerator
      Noop default implementation. May be overridden by subtypes.
      Specified by:
      configure in interface Configurable
      Specified by:
      configure in interface PostInsertIdentifierGenerator
      Parameters:
      type - The id property type descriptor
      parameters - param values, keyed by parameter name
      serviceRegistry - Access to service that may be needed.
    • getUniqueKeyPropertyNames

      public String[] getUniqueKeyPropertyNames(EntityPersister persister)
      Description copied from interface: OnExecutionGenerator
      The name of a property of the entity which may be used to locate the just-inserted row containing the generated value. Of course, the columns mapped by this property should form a unique key of the entity.

      The default implementation uses the @NaturalId property, if there is one.

      Specified by:
      getUniqueKeyPropertyNames in interface OnExecutionGenerator
    • 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.