Interface BeforeExecutionGenerator

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

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(SharedSessionContractImplementor, Object, Object, 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.