## 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
`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
`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`