Class SelectGenerator

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

public class SelectGenerator extends Object implements PostInsertIdentifierGenerator, BulkInsertionCapableIdentifierGenerator
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.

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

  • Constructor Details

    • SelectGenerator

      public SelectGenerator()
  • 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
    • 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.