H2データベース で、 IDデータ型 の列を持つテーブルで、H2に ID値 を生成させるように指定するにはどうすればよいですか?デフォルトでは、INSERT
がそのフィールドを省略した場合?
IDを生成する の方法を知っています。質問を読みました h2データベースに特定のUUIDを挿入する方法は? 。
私の質問は、H2に私に代わってUUID値を生成するように依頼する方法についてです。
組み込み関数を使用できます RANDOM_UUID()
:
create table test(id int primary key, data uuid default random_uuid());
insert into test(id) values(1);
select * from test;
UUID(またはその他のランダムに生成されたデータ)を主キーとして使用すると、行数が数百万を超える場合(H2だけでなく、一般にリレーショナルデータベースの場合)、パフォーマンスの問題が発生することに注意してください。
@Thomas Muellerによると、何時間もグーグルで簡単な解決策を作成しました
hibernateとjpaの場合:
_@Id
@GeneratedValue(generator = "UUID")
@GenericGenerator(
name = "UUID",
strategy = "org.hibernate.id.UUIDGenerator"
)
@Column(name = "ID", updatable = false, nullable = false)
@ColumnDefault("random_uuid()")
@Type(type = "uuid-char")
@Getter
@Setter
private UUID id;
_
したがって、@Type(type = "uuid-char")
は、必要に応じてフィールドをVARCHAR(255)
にします(デフォルトではバイナリです)。
そして、@ColumnDefault("random_uuid()")
は、生成されたテーブルDDLのデフォルト値を設定します
お役に立てれば