I defined a generator for a JPA class:
<sequence-generator name="MY_SEQ" allocation-size="-1"
sequence-name="MY_SEQ"
initial-value="100000000" />
There are cases where I already have an ID for an entity but when I insert the Entity the Id gets generated using the generator.
Is it possible to define a generator that will only generate an Id when one does not exist?
I am using Hibernate as a JPA Provider.
Thank you
I couldn’t find a way to do this in JPA so I used Hibernate EJB3 event listeners. I over rode the
saveWithGeneratedIdto use reflection to check the entity for an@Idannotation and then to check that field for a value. If it has a value then I callsaveWithRequestedIdinstead. Other wise I let it generate the Id. This worked well because I can still use the sequence for Hibernate that is set up if I need an Id. The reflection might add overhead so I might change it a little. I was thinking of having agetId()orgetPK()method in all entities so I don’t have to search for which field is the@Id.Before I used reflection I tried calling session.getIdentifier(entity) to check but I was getting TransientObjectException( “The instance was not associated with this session” ). I couldn;t figure out how to get the Entity into the session without saving it first so I gave up. Below is the listener code I wrote.
I then had to add the listener to my persistence.xml