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 のような非トランザクションストレージエンジンを使用しなければなりません。
Spring Framework 5.3.7 の時点で、MySQLMaxValueIncrementer
は MySQL セーフアップデートモードと互換性があります。
paddingLength
コンストラクターと説明 |
---|
MySQLMaxValueIncrementer() Bean プロパティスタイルの使用のデフォルトコンストラクター。 |
MySQLMaxValueIncrementer(DataSourceSE dataSource, StringSE incrementerName, StringSE columnName) 便利なコンストラクター。 |
修飾子と型 | メソッドと説明 |
---|---|
protected long | getNextKey() long として、次に使用するキーを決定します。 |
void | setUseNewConnection(boolean useNewConnection) インクリメンターに新しい接続を使用するかどうかを設定します。 |
afterPropertiesSet, getCacheSize, getColumnName, setCacheSize, setColumnName
getDataSource, getIncrementerName, getPaddingLength, nextIntValue, nextLongValue, nextStringValue, setDataSource, setIncrementerName, setPaddingLength
cloneSE, equalsSE, finalizeSE, getClassSE, hashCodeSE, notifySE, notifyAllSE, toStringSE, waitSE, waitSE, waitSE
public MySQLMaxValueIncrementer()
public MySQLMaxValueIncrementer(DataSourceSE dataSource, StringSE incrementerName, StringSE columnName)
dataSource
- 使用する DataSourceincrementerName
- 使用するシーケンステーブルの名前 columnName
- 使用するシーケンステーブルの列の名前 public void setUseNewConnection(boolean useNewConnection)
true
は、インクリメント操作に分離された別個のトランザクションを使用して、トランザクションストレージエンジンをサポートするために必要です。シーケンステーブルのストレージエンジンが非トランザクション(MYISAM など)である場合は、false
で十分です。インクリメント操作のために追加の Connection
を取得する手間が省けます。
Spring Framework 5.0 以降、デフォルトは true
です。
DataSource.getConnection()
SEprotected long getNextKey() throws DataAccessException
AbstractDataFieldMaxValueIncrementer
AbstractDataFieldMaxValueIncrementer
の getNextKey
DataAccessException