org.springframework.jdbc.support.incrementer

## Class DerbyMaxValueIncrementer

- java.lang.Object
- - org.springframework.jdbc.support.incrementer.AbstractDataFieldMaxValueIncrementer
  - - org.springframework.jdbc.support.incrementer.AbstractColumnMaxValueIncrementer
    - - org.springframework.jdbc.support.incrementer.DerbyMaxValueIncrementer

- All Implemented Interfaces:
    InitializingBean, DataFieldMaxValueIncrementer

      public class DerbyMaxValueIncrementer
      extends AbstractColumnMaxValueIncrementer

  `DataFieldMaxValueIncrementer` that increments the maximum value of a given Derby table with the equivalent of an auto-increment column. Note: If you use this class, your Derby key column should NOT be defined as an IDENTITY column, as the sequence table does the job.

  The sequence is kept in a table. There should be one sequence table per table that needs an auto-generated key.

  Derby requires an additional column to be used for the insert since it is impossible to insert a null into the identity column and have the value generated. This is solved by providing the name of a dummy column that also must be created in the sequence table.

  Example:

      create table tab (id int not null primary key, text varchar(100));
       create table tab_sequence (value int generated always as identity, dummy char(1));
       insert into tab_sequence (dummy) values(null);

  If "cacheSize" is set, the intermediate values are served without querying the database. If the server or your application is stopped or crashes or a transaction is rolled back, the unused values will never be served. The maximum hole size in numbering is consequently the value of cacheSize. HINT: Since Derby supports the JDBC 3.0 `getGeneratedKeys` method, it is recommended to use IDENTITY columns directly in the tables and then utilizing a `KeyHolder` when calling the with the `update(PreparedStatementCreator psc, KeyHolder generatedKeyHolder)` method of the `JdbcTemplate`.

  Thanks to Endre Stolsvik for the suggestion!

  Since:
    2.5
  Author:
    Thomas Risberg, Juergen Hoeller

- - ### Field Summary

    - ### Fields inherited from class org.springframework.jdbc.support.incrementer.AbstractDataFieldMaxValueIncrementer

      `paddingLength`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `DerbyMaxValueIncrementer()` Default constructor for bean property style usage.
    `DerbyMaxValueIncrementer(DataSource dataSource, String incrementerName, String columnName)` Convenience constructor.
    `DerbyMaxValueIncrementer(DataSource dataSource, String incrementerName, String columnName, String dummyName)` Convenience constructor.

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `String` | `getDummyName()` Return the name of the dummy column.
    `protected long` | `getNextKey()` Determine the next key to use, as a long.
    `void` | `setDummyName(String dummyName)` Set the name of the dummy column.

    - ### Methods inherited from class org.springframework.jdbc.support.incrementer.AbstractColumnMaxValueIncrementer

      `afterPropertiesSet, getCacheSize, getColumnName, setCacheSize, setColumnName`

    - ### Methods inherited from class org.springframework.jdbc.support.incrementer.AbstractDataFieldMaxValueIncrementer

      `getDataSource, getIncrementerName, getPaddingLength, nextIntValue, nextLongValue, nextStringValue, setDataSource, setIncrementerName, setPaddingLength`

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Constructor Detail

    - #### DerbyMaxValueIncrementer

          public DerbyMaxValueIncrementer()

      Default constructor for bean property style usage.
      See Also:
        `AbstractDataFieldMaxValueIncrementer.setDataSource(javax.sql.DataSource)`, `AbstractDataFieldMaxValueIncrementer.setIncrementerName(java.lang.String)`, `AbstractColumnMaxValueIncrementer.setColumnName(java.lang.String)`

    - #### DerbyMaxValueIncrementer

          public DerbyMaxValueIncrementer(DataSource dataSource,
                                  String incrementerName,
                                  String columnName)

      Convenience constructor.
      Parameters:
        `dataSource` - the DataSource to use
        `incrementerName` - the name of the sequence/table to use
        `columnName` - the name of the column in the sequence table to use

    - #### DerbyMaxValueIncrementer

          public DerbyMaxValueIncrementer(DataSource dataSource,
                                  String incrementerName,
                                  String columnName,
                                  String dummyName)

      Convenience constructor.
      Parameters:
        `dataSource` - the DataSource to use
        `incrementerName` - the name of the sequence/table to use
        `columnName` - the name of the column in the sequence table to use
        `dummyName` - the name of the dummy column used for inserts

  - ### Method Detail

    - #### setDummyName

          public void setDummyName(String dummyName)

      Set the name of the dummy column.

    - #### getDummyName

          public String getDummyName()

      Return the name of the dummy column.

    - #### getNextKey

          protected long getNextKey()
                             throws DataAccessException

      Description copied from class: `AbstractDataFieldMaxValueIncrementer`
      Determine the next key to use, as a long.
      Specified by:
        `getNextKey` in class `AbstractDataFieldMaxValueIncrementer`
      Returns:
        the key to use as a long. It will eventually be converted later in another format by the public concrete methods of this class.
      Throws:
        `DataAccessException`