Interface BeforeExecutionGenerator

All Superinterfaces:
Generator, Serializable
All Known Subinterfaces:
IdentifierGenerator, OptimizableGenerator, PersistentIdentifierGenerator
All Known Implementing Classes:
AbstractUUIDGenerator, CompositeNestedGeneratedValueGenerator, CurrentTimestampGeneration, ForeignGenerator, GUIDGenerator, IncrementGenerator, NativeGenerator, OrderedSequenceGenerator, SequenceStyleGenerator, SourceGeneration, TableGenerator, TenantIdGeneration, UuidGenerator, UUIDGenerator, UUIDHexGenerator, VersionGeneration

public interface BeforeExecutionGenerator extends Generator
A generator that is called to produce a value just before a row is written to the database. The generate(org.hibernate.engine.spi.SharedSessionContractImplementor, java.lang.Object, java.lang.Object, org.hibernate.generator.EventType) method may execute arbitrary Java code. It may even, in principle, access the database via JDBC. But however it's produced, the generated value is sent to the database via a parameter of a JDBC prepared statement, just like any other field or property value.

Any BeforeExecutionGenerator with generation event types EventTypeSets.INSERT_ONLY may be used to produce identifiers. The built-in identifier generators all implement the older extension point IdentifierGenerator, which is a subtype of this interface, but that is no longer a requirement for custom id generators.

A custom id generator may be integrated with the program using either:

On the other hand, generators for regular fields and properties may be integrated using ValueGenerationType, as for any Generator.

Since:
6.2
  • Method Details

    • generate

      Object generate(SharedSessionContractImplementor session, Object owner, Object currentValue, EventType eventType)
      Generate a value.
      Parameters:
      session - The session from which the request originates.
      owner - The instance of the object owning the attribute for which we are generating a value.
      currentValue - The current value assigned to the property, or null
      eventType - The type of event that has triggered generation of a new value
      Returns:
      The generated value
    • generatedOnExecution

      default boolean generatedOnExecution()
      Description copied from interface: Generator
      Determines if the property value is generated when a row is written to the database, or in Java code that executes before the row is written.
      • Generators which only implement BeforeExecutionGenerator must result false.
      • Generators which only implement OnExecutionGenerator must result true.
      • Generators which implement both subinterfaces may decide at runtime what value to return.
      Specified by:
      generatedOnExecution in interface Generator
      Returns:
      true if the value is generated by the database as a side effect of the execution of an insert or update statement, or false if it is generated in Java code before the statement is executed via JDBC.