Package 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.AbstractIdentityColumnMaxValueIncrementer
org.springframework.jdbc.support.incrementer.DerbyMaxValueIncrementer

All Implemented Interfaces:
  `org.springframework.beans.factory.InitializingBean`, `DataFieldMaxValueIncrementer`

public class DerbyMaxValueIncrementer extends AbstractIdentityColumnMaxValueIncrementer
`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 `getGeneratedKeys` method, it is recommended to use IDENTITY columns directly in the tables and then utilize a `KeyHolder` when calling 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
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

Modifier and Type
Method
Description
`String`
`getDummyName()`
Return the name of the dummy column.
`protected String`
`getIdentityStatement()`
Statement to use to obtain the current identity value.
`protected String`
`getIncrementStatement()`
Statement to use to increment the "sequence" value.
`void`
`setDummyName(String dummyName)`
Set the name of the dummy column.

### Methods inherited from class org.springframework.jdbc.support.incrementer.AbstractIdentityColumnMaxValueIncrementer

`getDeleteStatement, getNextKey, isDeleteSpecificValues, setDeleteSpecificValues`

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

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

### setDummyName

public void setDummyName(String dummyName)
Set the name of the dummy column.

### getDummyName

public String getDummyName()
Return the name of the dummy column.

### getIncrementStatement

protected String getIncrementStatement()
Description copied from class: `AbstractIdentityColumnMaxValueIncrementer`
Statement to use to increment the "sequence" value.

Specified by:
  `getIncrementStatement` in class `AbstractIdentityColumnMaxValueIncrementer`
Returns:
  the SQL statement to use

### getIdentityStatement

protected String getIdentityStatement()
Description copied from class: `AbstractIdentityColumnMaxValueIncrementer`
Statement to use to obtain the current identity value.

Specified by:
  `getIdentityStatement` in class `AbstractIdentityColumnMaxValueIncrementer`
Returns:
  the SQL statement to use