public class MySQLMaxValueIncrementer extends AbstractColumnMaxValueIncrementer
DataFieldMaxValueIncrementer
。注: このクラスを使用する場合、シーケンステーブルが機能するため、MySQL キー列は自動インクリメントであってはなりません。シーケンスはテーブルに保持されます。自動生成キーを必要とするテーブルごとに 1 つのシーケンステーブルが必要です。シーケンスは別の接続を使用して割り当てられるため、シーケンステーブルで使用されるストレージエンジンは MYISAM または INNODB にすることができます。進行中の他のトランザクションの影響を受けません。
例:
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);"cacheSize" が設定されている場合、データベースを照会せずに中間値が提供されます。サーバーまたはアプリケーションが停止またはクラッシュしたり、トランザクションがロールバックされたりすると、未使用の値は提供されません。番号付けの最大ホールサイズは cacheSize の値になります。
"useNewConnection" プロパティを false に設定することで、インクリメンタの新しい接続の取得を回避することができます。この場合、インクリメンタテーブルを定義するときに、MYISAM などの非トランザクションストレージエンジンを使用する必要があります。
paddingLength
コンストラクターと説明 |
---|
MySQLMaxValueIncrementer() Bean プロパティスタイルの使用のデフォルトコンストラクター。 |
MySQLMaxValueIncrementer(javax.sql.DataSource dataSource, java.lang.String incrementerName, java.lang.String columnName) 便利なコンストラクター。 |
修飾子と型 | メソッドと説明 |
---|---|
protected long | getNextKey() long として、次に使用するキーを決定します。 |
void | setUseNewConnection(boolean useNewConnection) インクリメンターに新しい接続を使用するかどうかを設定します。 |
afterPropertiesSet, getCacheSize, getColumnName, setCacheSize, setColumnName
getDataSource, getIncrementerName, getPaddingLength, nextIntValue, nextLongValue, nextStringValue, setDataSource, setIncrementerName, setPaddingLength
public MySQLMaxValueIncrementer()
public MySQLMaxValueIncrementer(javax.sql.DataSource dataSource, java.lang.String incrementerName, java.lang.String columnName)
dataSource
- 使用する DataSourceincrementerName
- 使用するシーケンステーブルの名前 columnName
- 使用するシーケンステーブルの列の名前 public void setUseNewConnection(boolean useNewConnection)
true
は、インクリメント操作に分離された別個のトランザクションを使用して、トランザクションストレージエンジンをサポートするために必要です。シーケンステーブルのストレージエンジンが非トランザクション(MYISAM など)である場合は、false
で十分です。インクリメント操作のために追加の Connection
を取得する手間が省けます。
Spring Framework 5.0 以降、デフォルトは true
です。
DataSource.getConnection()
protected long getNextKey() throws DataAccessException
AbstractDataFieldMaxValueIncrementer
AbstractDataFieldMaxValueIncrementer
の getNextKey
DataAccessException