2016-04-15 7 views
0

私は自分のプロジェクトにテーブルジェネレータを使用していますが、以下は同様のスニペットです。JPAクラスタ化された環境でのTableGeneratorの動作

@GeneratedValue(strategy = GenerationType.TABLE, generator = " TableGenerator") 
    @GenericGenerator(name = "TableGenerator", strategy = "org.hibernate.id.enhanced.TableGenerator", parameters = { 
    @Parameter(name = "table_name", value = "TABLE_GENERATOR")} 

私は、Hibernateが特定のエンティティのためにメモリに最小値と最大値をキャッシュしてTABLE_GENERATORで最小値と最大値を更新することを知っています。値は50〜100であると仮定します。

しかし、クラスタ化された環境でJPA/Hibernateテーブルジェネレータの動作が何であるかわかりません。つまり、複数のJVMがあるため、JMVの各最小値/最大値と更新される値テーブル:TABLE_GENERATOR

答えて

1

個人的にはクラスタ化された環境でTableGeneratorを使用していないため、動作するはずですが、単一のテーブルを使用しているため常に並行性やトランザクション上の問題が発生する可能性があります。一意性保証

  • は、任意のトランザクション外操作して、無: - ほとんどのプラットフォームのサポート - と利点をたくさん持っている

    IMOテーブル生成キーを使用すると、シーケンス番号を使用できない場合にのみ関連していますロックの問題、ロールバックに起因する数値の再利用はありません。

  • はキャッシュ値をサポートしているため、各スレッドまたはクラスタ要素は、ユニークであることが保証されている範囲を得ることができます。 1-25、スレッド2は26-50等となる。
  • シーケンスがオプションでない場合は3210
  • が休止

でサポートされている、これはうまくいくかもしれないが、私は納得していない回避するには穴がありません。

関連する問題