Class SequenceStyleGenerator

java.lang.Object
org.hibernate.id.enhanced.SequenceStyleGenerator
All Implemented Interfaces:
Configurable, IdentifierGenerator, PersistentIdentifierGenerator

public class SequenceStyleGenerator extends Object implements PersistentIdentifierGenerator, Configurable
Generates identifier values based on an sequence-style database structure. Variations range from actually using a sequence to using a table to mimic a sequence. These variations are encapsulated by the DatabaseStructure interface internally.

General configuration parameters:

NAME DEFAULT DESCRIPTION
SEQUENCE_PARAM DEF_SEQUENCE_NAME The name of the sequence/table to use to store/retrieve values
INITIAL_PARAM DEFAULT_INITIAL_VALUE The initial value to be stored for the given segment; the effect in terms of storage varies based on Optimizer and DatabaseStructure
INCREMENT_PARAM DEFAULT_INCREMENT_SIZE The increment size for the underlying segment; the effect in terms of storage varies based on Optimizer and DatabaseStructure
OPT_PARAM depends on defined increment size Allows explicit definition of which optimization strategy to use
FORCE_TBL_PARAM false Allows explicit definition of which optimization strategy to use

Configuration parameters used specifically when the underlying structure is a table:

NAME DEFAULT DESCRIPTION
VALUE_COLUMN_PARAM DEF_VALUE_COLUMN The name of column which holds the sequence value for the given segment
  • Field Details

  • Constructor Details

    • SequenceStyleGenerator

      public SequenceStyleGenerator()
  • Method Details

    • getDatabaseStructure

      public DatabaseStructure getDatabaseStructure()
      Getter for property 'databaseStructure'.
      Returns:
      Value for property 'databaseStructure'.
    • getOptimizer

      public Optimizer getOptimizer()
      Getter for property 'optimizer'.
      Returns:
      Value for property 'optimizer'.
    • getIdentifierType

      public Type getIdentifierType()
      Getter for property 'identifierType'.
      Returns:
      Value for property 'identifierType'.
    • configure

      public void configure(Type type, Properties params, Dialect dialect) throws MappingException
      Configure this instance, given the value of parameters specified by the user as <param> elements. This method is called just once, following instantiation.
      Specified by:
      configure in interface Configurable
      Parameters:
      params - param values, keyed by parameter name
      Throws:
      MappingException
    • determineSequenceName

      protected String determineSequenceName(Properties params, Dialect dialect)
      Determine the name of the sequence (or table if this resolves to a physical table) to use.

      Called during configuration.

      Parameters:
      params - The params supplied in the generator config (plus some standard useful extras).
      dialect - The dialect in effect
      Returns:
      The sequence name
    • determineValueColumnName

      protected String determineValueColumnName(Properties params, Dialect dialect)
      Determine the name of the column used to store the generator value in the db.

      Called during configuration when resolving to a physical table.

      Parameters:
      params - The params supplied in the generator config (plus some standard useful extras).
      dialect - The dialect in effect.
      Returns:
      The value column name
    • determineInitialValue

      protected int determineInitialValue(Properties params)
      Determine the initial sequence value to use. This value is used when initializing the database structure (i.e. sequence/table).

      Called during configuration.

      Parameters:
      params - The params supplied in the generator config (plus some standard useful extras).
      Returns:
      The initial value
    • determineIncrementSize

      protected int determineIncrementSize(Properties params)
      Determine the increment size to be applied. The exact implications of this value depends on the optimizer being used.

      Called during configuration.

      Parameters:
      params - The params supplied in the generator config (plus some standard useful extras).
      Returns:
      The increment size
    • determineOptimizationStrategy

      protected String determineOptimizationStrategy(Properties params, int incrementSize)
      Determine the optimizer to use.

      Called during configuration.

      Parameters:
      params - The params supplied in the generator config (plus some standard useful extras).
      incrementSize - The determined increment size
      Returns:
      The optimizer strategy (name)
    • determineAdjustedIncrementSize

      protected int determineAdjustedIncrementSize(String optimizationStrategy, int incrementSize)
      In certain cases we need to adjust the increment size based on the selected optimizer. This is the hook to achieve that.
      Parameters:
      optimizationStrategy - The optimizer strategy (name)
      incrementSize - The determined increment size
      Returns:
      The adjusted increment size.
    • buildDatabaseStructure

      protected DatabaseStructure buildDatabaseStructure(Type type, Properties params, Dialect dialect, boolean forceTableUse, String sequenceName, int initialValue, int incrementSize)
      Build the database structure.
      Parameters:
      type - The Hibernate type of the identifier property
      params - The params supplied in the generator config (plus some standard useful extras).
      dialect - The dialect being used.
      forceTableUse - Should a table be used even if the dialect supports sequences?
      sequenceName - The name to use for the sequence or table.
      initialValue - The initial value.
      incrementSize - the increment size to use (after any adjustments).
      Returns:
      An abstraction for the actual database structure in use (table vs. sequence).
    • generate

      public Serializable generate(SessionImplementor session, Object object) throws HibernateException
      Generate a new identifier.
      Specified by:
      generate in interface IdentifierGenerator
      Parameters:
      session -
      object - the entity or toplevel collection for which the id is being generated
      Returns:
      a new identifier
      Throws:
      HibernateException
    • generatorKey

      public Object generatorKey()
      Return a key unique to the underlying database objects. Prevents us from trying to create/remove them multiple times.
      Specified by:
      generatorKey in interface PersistentIdentifierGenerator
      Returns:
      Object an identifying key for this generator
    • sqlCreateStrings

      public String[] sqlCreateStrings(Dialect dialect) throws HibernateException
      The SQL required to create the underlying database objects.
      Specified by:
      sqlCreateStrings in interface PersistentIdentifierGenerator
      Parameters:
      dialect - The dialect against which to generate the create command(s)
      Returns:
      The create command(s)
      Throws:
      HibernateException - problem creating the create command(s)
    • sqlDropStrings

      public String[] sqlDropStrings(Dialect dialect) throws HibernateException
      The SQL required to remove the underlying database objects.
      Specified by:
      sqlDropStrings in interface PersistentIdentifierGenerator
      Parameters:
      dialect - The dialect against which to generate the drop command(s)
      Returns:
      The drop command(s)
      Throws:
      HibernateException - problem creating the drop command(s)