私の主キーは別のものなので、@ 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を使用しています。
これを試してみてください
@Id
@GeneratedValue(generator = "hibernate-uuid")
@GenericGenerator(name = "uuid", strategy = "uuid2")
@Column(name = "uuid", unique = true)
private String uuid;
これを読む リンク 休止状態のドキュメントを読むことが可能
GeneratedValue
のJavadocを確認してください。
主キーの値の生成戦略の仕様を提供します。
言い換えれば、注釈だけでは「IDなし」属性を初期化することはできません。
ただし、@PrePersist
:
@PrePersist
public void initializeUUID() {
if (uuid == null) {
uuid = UUID.randomUUID().toString();
}
}
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