Domanda

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.

È stato utile?

Soluzione 2

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

Altri suggerimenti

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();
    }
}

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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top