public static class

OptimizerFactory.HiLoOptimizer

extends OptimizerFactory.OptimizerSupport
java.lang.Object
   ↳ org.hibernate.id.enhanced.OptimizerFactory.OptimizerSupport
     ↳ org.hibernate.id.enhanced.OptimizerFactory.HiLoOptimizer

Class Overview

Optimizer which applies a 'hilo' algorithm in memory to achieve optimization.

A 'hilo' algorithm is simply a means for a single value stored in the database to represent a "bucket" of possible, contiguous values. The database value identifies which particular bucket we are on.

This database value must be paired with another value that defines the size of the bucket; the number of possible values available. The incrementSize serves this purpose. The naming here is meant more for consistency in that this value serves the same purpose as the increment supplied to the OptimizerFactory.PooledOptimizer.

The general algorithms used to determine the bucket are:

  1. upperLimit = (databaseValue * incrementSize) + 1
  2. lowerLimit = upperLimit - 1
As an example, consider a case with incrementSize of 10. Initially the database holds 1:
  1. upperLimit = (1 * 20) + 1 = 21
  2. lowerLimit = 21 - 20 = 1
From there we increment the value from lowerLimit until we reach the upperLimit, at which point we would define a new bucket. The database now contains 2, though incrementSize remains unchanged:
  1. upperLimit = (2 * 20) + 1 = 41
  2. lowerLimit = 41 - 20 = 21
And so on...

Note, 'value' always (after init) holds the next value to return

Summary

[Expand]
Inherited Fields
From class org.hibernate.id.enhanced.OptimizerFactory.OptimizerSupport
Public Constructors
OptimizerFactory.HiLoOptimizer(Class returnClass, int incrementSize)
Public Methods
boolean applyIncrementSizeToSourceValues()
synchronized Serializable generate(AccessCallback callback)
IntegralDataTypeHolder getHiValue()
Getter for property 'upperLimit'.
IntegralDataTypeHolder getLastSourceValue()
IntegralDataTypeHolder getLastValue()
Getter for property 'lastValue'.
[Expand]
Inherited Methods
From class org.hibernate.id.enhanced.OptimizerFactory.OptimizerSupport
From class java.lang.Object
From interface org.hibernate.id.enhanced.Optimizer

Public Constructors

public OptimizerFactory.HiLoOptimizer (Class returnClass, int incrementSize)

Public Methods

public boolean applyIncrementSizeToSourceValues ()

public synchronized Serializable generate (AccessCallback callback)

public IntegralDataTypeHolder getHiValue ()

Getter for property 'upperLimit'.

Exposure intended for testing purposes.

Returns
  • Value for property 'upperLimit'.

public IntegralDataTypeHolder getLastSourceValue ()

public IntegralDataTypeHolder getLastValue ()

Getter for property 'lastValue'.

Exposure intended for testing purposes.

Returns
  • Value for property 'lastValue'.