I'm trying to use generated UUIDs without @Id annotation, because my primary key is something else. The application does not generate an UUID, do you have an idea?
This is my declaration:
@Column(name = "APP_UUID", unique = true)
@GeneratedValue(generator="system-uuid")
@GenericGenerator(name="system-uuid", strategy = "uuid")
private String uuid;
I'm using Hibernate 4.3.0 with Oracle10g.
Check the Javadoc of GeneratedValue
:
Provides for the specification of generation strategies for the values of primary keys.
With other words - it is not possible with just an annotation to initialize a 'none ID' attribute.
But you can use @PrePersist
:
@PrePersist
public void initializeUUID() {
if (uuid == null) {
uuid = UUID.randomUUID().toString();
}
}
try this it may help
@Id
@GeneratedValue(generator = "hibernate-uuid")
@GenericGenerator(name = "uuid", strategy = "uuid2")
@Column(name = "uuid", unique = true)
private String uuid;
read this link read hibernate documents it is possible
It's not because your UUID is a primary key that it's mandatory to have it annoted with @GeneratedValue
.
For example, you can do something like this :
public class MyClass
{
@Id
private String uuid;
public MyClass() {}
public MyClass (String uuid) {
this.uuid = uuid;
}
}
And in your app, generate a UUID before saving your entity :
String uuid = UUID.randomUUID().toString();
em.persist(new MyClass(uuid)); // em : entity manager
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With