How to use UUIDs with Hibernate as a field?
Solution 1
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
Solution 2
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();
}
}
Solution 3
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
Related videos on Youtube
Florian Mozart
Updated on September 15, 2022Comments
-
Florian Mozart over 1 year
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.
-
rand0m86 almost 10 yearsHave you found the solution yet? I'm having the same problem.
-
Florian Mozart almost 10 yearsI use the last answer as a fix
-
jlb about 9 years@FlorianMozart you should accept the last answer
-
-
Florian Mozart about 10 yearsI used your solution without the @Id annotation. No improvement :/
-
Florian Mozart about 10 yearsEclipse throws an error:"This class has a composite primary key. It must use an ID class."
-
Florian Mozart about 10 yearsI know the chance to have an UUID twice is very unlikely, but it could happen. That's why I wanted hibernate to manage UUIDs. Thank you for your help
-
Olimpiu POP over 8 years@Engineer - you should add more explanations to your answer. Links can become obsolete. It's definitely appropriate to cite sources, but you should provide a proper, full response.
-
Tobias Liefke over 8 yearsHibernate does nothing to prevent an ID - conflict (especially it does not generate a new value if the first value exists in the database already)
-
EpicPandaForce about 8 years
Unable to build Hibernate SessionFactory: Caused by: org.hibernate.AnnotationException: Unknown Id.generator: hibernate-uuid
-
Obaid Maroof about 8 yearsisn't it possible to have it generated without @Id annotation. I dont want my column to be a primary key.
-
dryleaf over 4 yearsThis does not answer the question.