Package org.springframework.jdbc.support.incrementer

# Class MySQLMaxValueIncrementer

java.lang.Object
org.springframework.jdbc.support.incrementer.AbstractDataFieldMaxValueIncrementer
org.springframework.jdbc.support.incrementer.AbstractColumnMaxValueIncrementer
org.springframework.jdbc.support.incrementer.MySQLMaxValueIncrementer

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

public class MySQLMaxValueIncrementer extends AbstractColumnMaxValueIncrementer
`DataFieldMaxValueIncrementer` that increments the maximum value of a given MySQL table with the equivalent of an auto-increment column. Note: If you use this class, your MySQL key column should NOT be auto-increment, 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. The storage engine used by the sequence table can be MYISAM or INNODB since the sequences are allocated using a separate connection without being affected by any other transactions that might be in progress.

Example:

     create table tab (id int unsigned not null primary key, text varchar(100));
     create table tab_sequence (value int not null);
     insert into tab_sequence values(0);

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

It is possible to avoid acquiring a new connection for the incrementer by setting the "useNewConnection" property to false. In this case you MUST use a non-transactional storage engine like MYISAM when defining the incrementer table.

Note that `MySQLMaxValueIncrementer` is compatible with MySQL safe updates mode.

Author:
  Jean-Pierre Pawlak, Thomas Risberg, Juergen Hoeller, Sam Brannen

## Field Summary

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

`paddingLength`

## Constructor Summary

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

## Method Summary

Modifier and Type
Method
Description
`protected long`
`getNextKey()`
Determine the next key to use, as a long.
`void`
`setUseNewConnection(boolean useNewConnection)`
Set whether to use a new connection for the incrementer.

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

### MySQLMaxValueIncrementer

public MySQLMaxValueIncrementer()
Default constructor for bean property style usage.

See Also:
  - `AbstractDataFieldMaxValueIncrementer.setDataSource(javax.sql.DataSource)`
  - `AbstractDataFieldMaxValueIncrementer.setIncrementerName(java.lang.String)`
  - `AbstractColumnMaxValueIncrementer.setColumnName(java.lang.String)`

### MySQLMaxValueIncrementer

public MySQLMaxValueIncrementer(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

## Method Details

### setUseNewConnection

public void setUseNewConnection(boolean useNewConnection)
Set whether to use a new connection for the incrementer.

`true` is necessary to support transactional storage engines, using an isolated separate transaction for the increment operation. `false` is sufficient if the storage engine of the sequence table is non-transactional (like MYISAM), avoiding the effort of acquiring an extra `Connection` for the increment operation.

Default is `true`.

Since:
  4.3.6
See Also:
  - `DataSource.getConnection()`

### getNextKey

protected long getNextKey() throws org.springframework.dao.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:
  `org.springframework.dao.DataAccessException`