Class PooledOptimizer

java.lang.Object
org.hibernate.id.enhanced.AbstractOptimizer
org.hibernate.id.enhanced.PooledOptimizer
All Implemented Interfaces:
InitialValueAwareOptimizer, Optimizer

public class PooledOptimizer extends AbstractOptimizer implements InitialValueAwareOptimizer
Optimizer which uses a pool of values, backed by a logical sequence. A logical sequence is usually just an unpooled sequence or table generator.

The pool size is controlled by the allocationSize of a sequence generator or sequence generator.

This optimizer interprets the current value held by its underlying logical sequence (that is, the last value generated by a database sequence, or the current value of a table row emulating a sequence) as an upper bound on the range of already-allocated ids. From time to time, the optimizer allocates a range of values to itself, interpreting the next value retrieved from the logical sequence as an upper bound on the range of newly allocated ids.

The PooledLoOptimizer is similar, but interprets the current value of the logical sequence as a lower bound on the range of already-allocated ids.

This optimizer has similar performance characteristics to the HiLoOptimizer, but here the range bounds are stored directly by the underlying database structures.

See Also:
  • Constructor Details

    • PooledOptimizer

      public PooledOptimizer(Class<?> returnClass, int incrementSize)
      Constructs a PooledOptimizer
      Parameters:
      returnClass - The Java type of the values to be generated
      incrementSize - The increment size.
  • Method Details

    • generate

      public Serializable generate(AccessCallback callback)
      Description copied from interface: Optimizer
      Generate an identifier value accounting for this specific optimization.
      Specified by:
      generate in interface Optimizer
      Parameters:
      callback - Callback to access the underlying value source.
      Returns:
      The generated identifier value.
    • reset

      public void reset()
      Description copied from interface: Optimizer
      Reset the optimizer before restarting the underlying database sequence.
      Specified by:
      reset in interface Optimizer
    • getLastSourceValue

      public IntegralDataTypeHolder getLastSourceValue()
      Description copied from interface: Optimizer
      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.
      Specified by:
      getLastSourceValue in interface Optimizer
      Returns:
      The last value we obtained from the underlying source; null indicates we have not yet consulted with the source.
    • applyIncrementSizeToSourceValues

      public boolean applyIncrementSizeToSourceValues()
      Description copied from interface: Optimizer
      Are increments to be applied to the values stored in the underlying value source?
      Specified by:
      applyIncrementSizeToSourceValues in interface Optimizer
      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.
    • getLastValue

      public IntegralDataTypeHolder getLastValue()
      Getter for property 'lastValue'.

      Exposure intended for testing purposes.

      Returns:
      Value for property 'lastValue'.
    • injectInitialValue

      public void injectInitialValue(long initialValue)
      Description copied from interface: InitialValueAwareOptimizer
      Reports the user specified initial value to the optimizer.

      -1 is used to indicate that the user did not specify.

      Specified by:
      injectInitialValue in interface InitialValueAwareOptimizer
      Parameters:
      initialValue - The initial value specified by the user, or -1 to indicate that the user did not specify an initial value.
    • createLowValueExpression

      public Expression createLowValueExpression(Expression databaseValue, SessionFactoryImplementor sessionFactory)
      Description copied from interface: Optimizer
      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.

      Specified by:
      createLowValueExpression in interface Optimizer
      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
    • getAdjustment

      public int getAdjustment()
      Specified by:
      getAdjustment in interface Optimizer