Mysql にシーケンスはありませんが、「TABLE」ID 生成を使用できます
@javax.persistence.TableGenerator(
name="EMP_GEN",
table="GENERATOR_TABLE",
pkColumnName = "key",
valueColumnName = "hi"
pkColumnValue="EMP",
allocationSize=20
)
@Entity
public class Klass {
@Id
@GeneratedValue(strategy = GenerationType.TABLE, generator=EMP_GEN)
@Column(name = "ID")
private Long id;
}
@javax.persistence.TableGenerator [...]
すべてのエンティティにスニペットを追加する必要がある場合があります
編集
どうもありがとう。しかし、各エンティティに追加せずにそのスニペットを使用する別の方法はありますか? また、データベースにテーブルを作成するときに、DBMS の ID 主キー列を宣言して、そのような値を自動生成するにはどうすればよいですか? –ナポレオン76
残念ながら、これを行うエレガントな方法はわかりません:(。私のプロジェクトでは、いくつかのエンティティで a シーケンスを使用しており、各クラスでシーケンスを宣言する必要があります。試すことができることの1つ(ただし、私はしません. t 本当に好き) は、すべてのエンティティに対してスーパー クラスを作成することであり、そのスーパークラスには ID フィールドと注釈のみが含まれています. プロジェクトでこれを見たような気がしますが、100% 確実ではありません.
DBにその戦略を使用するように指示することについて、私はそれが本当に可能だとは思わない. トリガーを追加して、スキーマ内の各テーブルに適用することができます。テーブルに新しい行を挿入し、ジェネレーター テーブルから値を選択して行に追加すると、トリガーが起動します。正直なところ、これが機能するかどうかはわかりません.2つの同時セッションで行を作成している場合、これが機能しないことは 99% 確信しています。
戦略を再考して、ID に通常の自動インクリメント列を使用し、連続番号をテーブルの別の列に入れることはできますか?