I have entity A with composite PK [ id(generated from sequence) + version ].
For a brand new record I want to pick the id from a sequence defined in the DB side. Lets say its created like below
ID VERSION 1 0
Next time, I want a new version of the same Id to be created like below
ID VERSION 1 0 1 1
Note : in the second case I don’t want it to be generated by the sequence generator, coz I want to manually provide it.
Is it possible in JPA/Hibernate ? If possible could someone please tell how to do it ?
Many thanks in advance!
Advertisement
Answer
Hibernate ORM doesn’t support the generation of id with composite keys.
You can probably run a native SQL when you create a new object. With PostgreSQL for example:
Long id = (Long) em.createNativeQuery("SELECT nextval('mysequence')").getSingleResult(); Long version = ...; EmbeddedId id = new EmbeddedId(id, version);
Where EmebeddedId is the composite key of your entity:
@Entity class Example { @Id EmbeddedId id; ... } @Embeddable class EventId implements Serializable { Long id; Long version; ... }
Where mysequence
is the name of a sequence on the database.