クラス MySQLMaxValueIncrementer

実装されたすべてのインターフェース:
InitializingBeanDataFieldMaxValueIncrementer

public class MySQLMaxValueIncrementer extends AbstractColumnMaxValueIncrementer
指定された MySQL テーブルの最大値を、自動インクリメントカラムと同等の値でインクリメントする 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 セーフアップデートモードと互換性があります。

作成者:
Jean-Pierre Pawlak, Thomas Risberg, Juergen Hoeller, Sam Brannen
  • コンストラクターの詳細

  • メソッドの詳細

    • setUseNewConnection

      public void setUseNewConnection(boolean useNewConnection)
      インクリメンターに新しい接続を使用するかどうかを設定します。

      true は、インクリメント操作に分離された別個のトランザクションを使用して、トランザクションストレージエンジンをサポートするために必要です。シーケンステーブルのストレージエンジンが非トランザクション(MYISAM など)である場合は、false で十分です。インクリメント操作のために追加の Connection を取得する手間が省けます。

      Spring Framework 5.0 以降、デフォルトは true です。

      導入:
      4.3.6
      関連事項:
    • getNextKey

      protected long getNextKey() throws DataAccessException
      クラスからコピーされた説明: AbstractDataFieldMaxValueIncrementer
      long として、次に使用するキーを決定します。
      次で指定:
      クラス AbstractDataFieldMaxValueIncrementergetNextKey 
      戻り値:
      long として使用するキー。最終的には、このクラスのパブリックコンクリートメソッドによって後で別の形式に変換されます。
      例外:
      DataAccessException