web-dev-qa-db-ja.com

HibernateでUUIDをフィールドとして使用するにはどうすればよいですか?

私の主キーは別のものなので、@ Idアノテーションなしで生成されたUUIDを使用しようとしています。アプリケーションはUUIDを生成しません、あなたは考えがありますか?

これは私の宣言です:

@Column(name = "APP_UUID", unique = true)
@GeneratedValue(generator="system-uuid")
@GenericGenerator(name="system-uuid", strategy = "uuid")
private String uuid;

Oracle10gでHibernate 4.3.0を使用しています。

17
Florian Mozart

これを試してみてください

@Id
@GeneratedValue(generator = "hibernate-uuid")
@GenericGenerator(name = "uuid", strategy = "uuid2")
@Column(name = "uuid", unique = true)
private String uuid;

これを読む リンク 休止状態のドキュメントを読むことが可能

7
Engineer

GeneratedValueのJavadocを確認してください。

主キーの値の生成戦略の仕様を提供します。

言い換えれば、注釈だけでは「IDなし」属性を初期化することはできません。

ただし、@PrePersist

@PrePersist
public void initializeUUID() {
    if (uuid == null) {
        uuid = UUID.randomUUID().toString();
    }
}
8
Tobias Liefke

UUIDが主キーであるからではなく、@GeneratedValueの注釈を付けることが必須です。

たとえば、次のようなことができます。

public class MyClass
{
   @Id
   private String uuid;

   public MyClass() {}

   public MyClass (String uuid) {
      this.uuid = uuid;
   }
}

アプリで、エンティティを保存する前にUUIDを生成します。

String uuid = UUID.randomUUID().toString();
em.persist(new MyClass(uuid)); // em : entity manager
2
user3173787