Interface Optimizer

All Known Implementing Classes:
AbstractOptimizer, HiLoOptimizer, LegacyHiLoAlgorithmOptimizer, NoopOptimizer, PooledLoOptimizer, PooledLoThreadLocalOptimizer, PooledOptimizer

public interface Optimizer
Performs optimization on an optimizable identifier generator. Typically. this optimization takes the form of trying to ensure we do not have to hit the database on each and every request to get an identifier value.

Optimizers are used with sequence generators and table generators. An optimizer may be selected by setting the configuration property "hibernate.id.optimizer.pooled.preferred".

Optimizers work on constructor injection. They should provide a constructor accepting the following arguments:

  1. java.lang.Class - The return type for the generated values
  2. int - The increment size
See Also:
  • Method Details

    • generate

      Serializable generate(AccessCallback callback)
      Generate an identifier value accounting for this specific optimization.
      Parameters:
      callback - Callback to access the underlying value source.
      Returns:
      The generated identifier value.
      Implementation Note:
      All known implementors are synchronized. Consider carefully if a new implementation could drop this requirement.
    • reset

      void reset()
      Reset the optimizer before restarting the underlying database sequence.
      Since:
      7.2
    • getLastSourceValue

      IntegralDataTypeHolder getLastSourceValue()
      A common means to access the last value obtained from the underlying source. This is intended for testing purposes, since accessing the underlying database source directly is much more difficult.
      Returns:
      The last value we obtained from the underlying source; null indicates we have not yet consulted with the source.
    • getIncrementSize

      int getIncrementSize()
      Retrieves the defined increment size.
      Returns:
      The increment size.
    • applyIncrementSizeToSourceValues

      boolean applyIncrementSizeToSourceValues()
      Are increments to be applied to the values stored in the underlying value source?
      Returns:
      True if the values in the source are to be incremented according to the defined increment size; false otherwise, in which case the increment size is a completely in-memory construct.
    • createLowValueExpression

      Expression createLowValueExpression(Expression databaseValue, SessionFactoryImplementor sessionFactory)
      Creates an expression representing the low/base value for ID allocation in batch insert operations.

      Each optimizer implementation should define its own strategy for calculating the starting value of a sequence range.

      Parameters:
      databaseValue - The expression representing the next value from database sequence
      sessionFactory - The session factory
      Returns:
      An expression that calculates the low/base value according to the optimizer strategy
      Since:
      7.1
    • getAdjustment

      default int getAdjustment()
      Since:
      7.2