私は次のようにUUIDを使用しています:
@Id
@GeneratedValue(generator = "uuid")
@GenericGenerator(name = "uuid", strategy = "uuid")
@Column(name = "uuid", unique = true)
private String uuid;
しかし、私はスマートな休止状態の警告を取得しています:
IETF RFC 4122準拠のUUID値を生成しないorg.hibernate.id.UUIDHexGeneratorを使用。代わりにorg.hibernate.id.UUIDGeneratorの使用を検討してください
それで、org.hibernate.id.UUIDGenerator
に切り替えたいのですが、今の質問は、それをHibernateのジェネレーターに伝える方法です。私は誰かが「休止状態-uuid」としてそれを使用したのを見ました-それでこれは私が試したことですが、否定的な結果があります:
@Id
@GeneratedValue(generator = "hibernate-uuid")
@GenericGenerator(name = "hibernate-uuid", strategy = "hibernate-uuid")
@Column(name = "uuid", unique = true)
private String uuid;
そのはず uuid2
:
...
@GenericGenerator(name = "uuid", strategy = "uuid2")
...
5.1.2.2.1。さまざまな追加ジェネレーター を参照してください。
HibernateDoc は、以下を使用できると言います。
@Id
@GeneratedValue(generator="system-uuid")
@GenericGenerator(name="system-uuid", strategy = "uuid")
@Column(name = "uuid", unique = true)
private String uuid;
Hibernate 3.5を使用していることを願っています。
試してみてください...
@Id
@GeneratedValue(generator = "uuid2")
@GenericGenerator(name = "uuid2", strategy = "uuid2")
@Column(name = "uuid", columnDefinition = "BINARY(16)")
public UUID getId()
{
return id;
}
public void setId(UUID i)
{
id = i;
}
「uuid」ではなく「uuid2」に注意してください。
@natanがコメントで指摘したように、Hibernate 5を使用している場合、以下のコードで十分です。
_@Id
@GeneratedValue
private Java.util.UUID id;
_
MySQLでBINARY(16)
のタイプでid
列を定義するか、他のSQL実装では同等です。
不明なId.generator:hibernate-uuid
@Id
@GeneratedValue(generator = "uuid")
@GenericGenerator(name = "uuid", strategy = "org.hibernate.id.UUIDGenerator")
@Column(name = "id", unique = true)
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
これはUUID v4を使用し、自動生成されたuuidは通常のvarchar(36)
の列に格納されます:
_@Id
@GeneratedValue(generator = "uuid2")
@GenericGenerator(name = "uuid2", strategy = "uuid2")
@Column(length = 36)
private String uuid;
_
これにより、パフォーマンスにある程度の影響があります。
BINARY(16)
を超えていますJava.lang.String
_インスタンスは_Java.util.UUID
_よりも多くのメモリを消費します:UUIDでは文字列として112バイト対UUID
では32バイト(つまり、2つのlongs + objヘッダー)。ただし、文字列化されたUUIDを使用する方がはるかに簡単です。クエリを記述しやすくなり、テーブルの内容を確認できます。
Hibernate 5.3でテスト済み
現在の5.4.2 Hibernateバージョンでは、
データベーステーブルにHuman-Readablevarchar(36)フィールドが必要な場合、
また、Serializable[〜#〜] uuid [〜#〜]あなたの= Javaクラス、
_@Type(type = "uuid-char")
を使用できます同時に _Java.util.UUID
_型でフィールドメンバーを宣言します。
MySQLでフィールド長を255から36に減らすには、@Column(length = 36)
が重要であることに注意してください。
PostgreSQLでは、代わりに@Type(type = "pg-uuid")
を使用する必要があることに注意してください。
_import org.hibernate.annotations.Type
import Java.util.UUID
import javax.persistence.Column
import javax.persistence.GeneratedValue
import javax.persistence.Id
@Id @GeneratedValue
@Type(type = "uuid-char") @Column(length = 36)
private UUID id;
_
@Id
@GeneratedValue(generator = "uuid")
@GenericGenerator(name = "uuid", strategy = "uuid")
@Column(name = "UUID_ID")
public String getId(){
return id;
}
これは、Hibernate 5.0.11.FINALでuuidジェネレーターの注釈を使用する適切な方法です。
注: ITは非推奨です。