I have an entity with auto-generated values :
@Entity
public class MyEntity {
@Id
@GeneratedValue(generator = "myuuid-generator")
@GenericGenerator(name = "myuuid-generator", strategy = "com.foo.hibernate.MyUUIDGenerator")
@Column
@AccessType(value = "property")
private String id;
// ...
}
I some cases I want to set the ID explicitly, so I have overriden the identifier generator :
public class MyUUIDGenerator extends UUIDHexGenerator {
@Override
public Serializable generate(SessionImplementor session, Object object) {
MyEntity entity = (MyEntity) object;
String explicitId = entity.getId();
if (explicitId != null) {
return explicitId;
}
return super.generate(session, object);
}
}
Unfortunatly that does not work :
MyEntity entity = new MyEntity();
entity.setId("bar");
session.persist(entity);
session.flush();
Error :
org.hibernate.PersistentObjectException: detached entity passed to persist: com.foo.MyEntity at org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:124) at org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:58) at org.hibernate.internal.SessionImpl.firePersist(SessionImpl.java:775) at org.hibernate.internal.SessionImpl.persist(SessionImpl.java:748) at org.hibernate.internal.SessionImpl.persist(SessionImpl.java:753)
I use Hibernate 5.0.10.Final.
What's wrong with my code ?
Thanks for your help.