Class SelectGenerator
- java.lang.Object
-
- org.hibernate.id.SelectGenerator
-
- All Implemented Interfaces:
Serializable,Generator,OnExecutionGenerator,BulkInsertionCapableIdentifierGenerator,Configurable,StandardGenerator,PostInsertIdentifierGenerator
public class SelectGenerator extends Object implements PostInsertIdentifierGenerator, BulkInsertionCapableIdentifierGenerator, StandardGenerator
A generator thatselects 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 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:
NaturalId,UniqueKeySelectingDelegate, Serialized Form- Implementation Note:
- This also implements the
selectgeneration type inhbm.xmlmappings.
-
-
Constructor Summary
Constructors Constructor Description SelectGenerator()
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description voidconfigure(Type type, Properties parameters, ServiceRegistry serviceRegistry)Noop default implementation.String[]getReferencedColumnValues(Dialect dialect)A SQL expression indicating how to calculate the generated values when the mapped columns are included in the SQL statement.String[]getUniqueKeyPropertyNames(EntityPersister persister)The name of a property of the entity which may be used to locate the just-inserted row containing the generated value.booleanreferenceColumnsInSql(Dialect dialect)Determines if the columns whose values are generated are included in the column list of the SQLinsertorupdatestatement.-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface org.hibernate.id.BulkInsertionCapableIdentifierGenerator
determineBulkInsertionIdentifierGenerationSelectFragment, supportsBulkInsertionIdentifierGeneration
-
Methods inherited from interface org.hibernate.id.Configurable
create, initialize
-
Methods inherited from interface org.hibernate.generator.Generator
allowAssignedIdentifiers, generatedOnExecution, generatesOnInsert, generatesOnUpdate, generatesSometimes
-
Methods inherited from interface org.hibernate.generator.OnExecutionGenerator
generatedOnExecution, getGeneratedIdentifierDelegate
-
Methods inherited from interface org.hibernate.id.PostInsertIdentifierGenerator
getEventTypes, writePropertyValue
-
-
-
-
Field Detail
-
KEY
public static final String KEY
The property specifying the unique key name.- See Also:
- Constant Field Values
-
-
Method Detail
-
configure
public void configure(Type type, Properties parameters, ServiceRegistry serviceRegistry)
Description copied from interface:PostInsertIdentifierGeneratorNoop default implementation. May be overridden by subtypes.- Specified by:
configurein interfaceConfigurable- Specified by:
configurein interfacePostInsertIdentifierGenerator- Parameters:
type- The id property type descriptorparameters- param values, keyed by parameter nameserviceRegistry- Access to service that may be needed.
-
getUniqueKeyPropertyNames
public String[] getUniqueKeyPropertyNames(EntityPersister persister)
Description copied from interface:OnExecutionGeneratorThe 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
@NaturalIdproperty, if there is one.- Specified by:
getUniqueKeyPropertyNamesin interfaceOnExecutionGenerator
-
referenceColumnsInSql
public boolean referenceColumnsInSql(Dialect dialect)
Description copied from interface:OnExecutionGeneratorDetermines if the columns whose values are generated are included in the column list of the SQLinsertorupdatestatement. For example, this method should return:trueif the value is generated by calling a SQL function likecurrent_timestamp, orfalseif the value is generated by a trigger, bygenerated always as, or using a column default value.
- Specified by:
referenceColumnsInSqlin interfaceOnExecutionGenerator- Returns:
trueif the column is included in the column list of the SQL statement.
-
getReferencedColumnValues
public String[] getReferencedColumnValues(Dialect dialect)
Description copied from interface:OnExecutionGeneratorA 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_timestampornextval('mysequence'), or - syntactic markers like
default.
- Specified by:
getReferencedColumnValuesin interfaceOnExecutionGenerator- 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.
- function calls like
-
-