web-dev-qa-db-ja.com

H2データベースエンジンのUUIDタイプの列の各行に対してデフォルトでUUID値を生成します

H2データベース で、 IDデータ型 の列を持つテーブルで、H2に ID値 を生成させるように指定するにはどうすればよいですか?デフォルトでは、INSERTがそのフィールドを省略した場合?

IDを生成する の方法を知っています。質問を読みました h2データベースに特定のUUIDを挿入する方法は?

私の質問は、H2に私に代わってUUID値を生成するように依頼する方法についてです。

7
Basil Bourque

組み込み関数を使用できます 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だけでなく、一般にリレーショナルデータベースの場合)、パフォーマンスの問題が発生することに注意してください。

13
Thomas Mueller

@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のデフォルト値を設定します

お役に立てれば

3
JeSa