diff --git a/core/src/main/java/org/hibernate/action/EntityIdentityInsertAction.java b/core/src/main/java/org/hibernate/action/EntityIdentityInsertAction.java index 7714cabd95..3282ae674a 100644 --- a/core/src/main/java/org/hibernate/action/EntityIdentityInsertAction.java +++ b/core/src/main/java/org/hibernate/action/EntityIdentityInsertAction.java @@ -74,7 +74,7 @@ public void execute() throws HibernateException { } //need to do that here rather than in the save event listener to let //the post insert events to have a id-filled entity when IDENTITY is used (EJB3) - persister.setIdentifier( instance, generatedId, session.getEntityMode() ); + persister.setIdentifier( instance, generatedId, session ); } diff --git a/core/src/main/java/org/hibernate/event/def/AbstractSaveEventListener.java b/core/src/main/java/org/hibernate/event/def/AbstractSaveEventListener.java index 7f9857e3a2..99a026a550 100644 --- a/core/src/main/java/org/hibernate/event/def/AbstractSaveEventListener.java +++ b/core/src/main/java/org/hibernate/event/def/AbstractSaveEventListener.java @@ -191,7 +191,7 @@ protected Serializable performSave( throw new NonUniqueObjectException( id, persister.getEntityName() ); } } - persister.setIdentifier( entity, id, source.getEntityMode() ); + persister.setIdentifier( entity, id, source ); } else { key = null; diff --git a/core/src/main/java/org/hibernate/event/def/DefaultDeleteEventListener.java b/core/src/main/java/org/hibernate/event/def/DefaultDeleteEventListener.java index 3dafbabb68..6f395de793 100644 --- a/core/src/main/java/org/hibernate/event/def/DefaultDeleteEventListener.java +++ b/core/src/main/java/org/hibernate/event/def/DefaultDeleteEventListener.java @@ -163,7 +163,7 @@ public void onDelete(DeleteEvent event, Set transientEntities) throws HibernateE deleteEntity( source, entity, entityEntry, event.isCascadeDeleteEnabled(), persister, transientEntities ); if ( source.getFactory().getSettings().isIdentifierRollbackEnabled() ) { - persister.resetIdentifier( entity, id, version, source.getEntityMode() ); + persister.resetIdentifier( entity, id, version, source ); } } diff --git a/core/src/main/java/org/hibernate/event/def/DefaultLoadEventListener.java b/core/src/main/java/org/hibernate/event/def/DefaultLoadEventListener.java index 988d89e629..095a4c3e91 100644 --- a/core/src/main/java/org/hibernate/event/def/DefaultLoadEventListener.java +++ b/core/src/main/java/org/hibernate/event/def/DefaultLoadEventListener.java @@ -221,7 +221,7 @@ protected Object load( MessageHelper.infoString( persister, event.getEntityId(), event.getSession().getFactory() ) ); } - persister.setIdentifier( event.getInstanceToLoad(), event.getEntityId(), event.getSession().getEntityMode() ); + persister.setIdentifier( event.getInstanceToLoad(), event.getEntityId(), event.getSession() ); } Object entity = doLoad(event, persister, keyToLoad, options); diff --git a/core/src/main/java/org/hibernate/event/def/DefaultMergeEventListener.java b/core/src/main/java/org/hibernate/event/def/DefaultMergeEventListener.java index 33f2f14ada..5d523190d2 100755 --- a/core/src/main/java/org/hibernate/event/def/DefaultMergeEventListener.java +++ b/core/src/main/java/org/hibernate/event/def/DefaultMergeEventListener.java @@ -292,10 +292,10 @@ protected Object mergeTransientEntity(Object entity, String entityName, Serializ persister.getIdentifier( entity, source.getEntityMode() ) : null; if ( copyCache.containsKey( entity ) ) { - persister.setIdentifier( copyCache.get( entity ), id, source.getEntityMode() ); + persister.setIdentifier( copyCache.get( entity ), id, source ); } else { - ( ( EventCache ) copyCache ).put( entity, persister.instantiate( id, source.getEntityMode() ), true ); //before cascade! + ( ( EventCache ) copyCache ).put( entity, persister.instantiate( id, source ), true ); //before cascade! //TODO: should this be Session.instantiate(Persister, ...)? } final Object copy = copyCache.get( entity ); diff --git a/core/src/main/java/org/hibernate/event/def/DefaultSaveOrUpdateEventListener.java b/core/src/main/java/org/hibernate/event/def/DefaultSaveOrUpdateEventListener.java index bb7c82446d..82e2f015ec 100755 --- a/core/src/main/java/org/hibernate/event/def/DefaultSaveOrUpdateEventListener.java +++ b/core/src/main/java/org/hibernate/event/def/DefaultSaveOrUpdateEventListener.java @@ -239,7 +239,7 @@ protected void entityIsDetached(SaveOrUpdateEvent event) { event.setRequestedId( getUpdateId( - entity, persister, event.getRequestedId(), event.getSession().getEntityMode() + entity, persister, event.getRequestedId(), event.getSession() ) ); @@ -253,7 +253,7 @@ protected void entityIsDetached(SaveOrUpdateEvent event) { * @param entity The entity. * @param persister The entity persister * @param requestedId The requested identifier - * @param entityMode The entity mode. + * @param session The session * * @return The id. * @@ -263,9 +263,9 @@ protected Serializable getUpdateId( Object entity, EntityPersister persister, Serializable requestedId, - EntityMode entityMode) { + SessionImplementor session) { // use the id assigned to the instance - Serializable id = persister.getIdentifier( entity, entityMode ); + Serializable id = persister.getIdentifier( entity, session.getEntityMode() ); if ( id == null ) { // assume this is a newly instantiated transient object // which should be saved rather than updated diff --git a/core/src/main/java/org/hibernate/event/def/DefaultUpdateEventListener.java b/core/src/main/java/org/hibernate/event/def/DefaultUpdateEventListener.java index bc888ad254..7b5dff85f5 100644 --- a/core/src/main/java/org/hibernate/event/def/DefaultUpdateEventListener.java +++ b/core/src/main/java/org/hibernate/event/def/DefaultUpdateEventListener.java @@ -30,6 +30,7 @@ import org.hibernate.ObjectDeletedException; import org.hibernate.EntityMode; import org.hibernate.engine.EntityEntry; +import org.hibernate.engine.SessionImplementor; import org.hibernate.engine.Status; import org.hibernate.event.SaveOrUpdateEvent; import org.hibernate.persister.entity.EntityPersister; @@ -62,14 +63,16 @@ protected Serializable performSaveOrUpdate(SaveOrUpdateEvent event) { * If the user specified an id, assign it to the instance and use that, * otherwise use the id already assigned to the instance */ - protected Serializable getUpdateId(Object entity, EntityPersister persister, Serializable requestedId, EntityMode entityMode) - throws HibernateException { - - if ( requestedId==null ) { - return super.getUpdateId(entity, persister, requestedId, entityMode); + protected Serializable getUpdateId( + Object entity, + EntityPersister persister, + Serializable requestedId, + SessionImplementor session) throws HibernateException { + if ( requestedId == null ) { + return super.getUpdateId( entity, persister, requestedId, session ); } else { - persister.setIdentifier(entity, requestedId, entityMode); + persister.setIdentifier( entity, requestedId, session ); return requestedId; } } diff --git a/core/src/main/java/org/hibernate/impl/SessionImpl.java b/core/src/main/java/org/hibernate/impl/SessionImpl.java index 7fef12ee95..e4ab76e735 100644 --- a/core/src/main/java/org/hibernate/impl/SessionImpl.java +++ b/core/src/main/java/org/hibernate/impl/SessionImpl.java @@ -1409,7 +1409,7 @@ public Object instantiate(EntityPersister persister, Serializable id) throws Hib checkTransactionSynchStatus(); Object result = interceptor.instantiate( persister.getEntityName(), entityMode, id ); if ( result == null ) { - result = persister.instantiate( id, entityMode ); + result = persister.instantiate( id, this ); } return result; } diff --git a/core/src/main/java/org/hibernate/impl/StatelessSessionImpl.java b/core/src/main/java/org/hibernate/impl/StatelessSessionImpl.java index a630f793e7..0a02779b5e 100755 --- a/core/src/main/java/org/hibernate/impl/StatelessSessionImpl.java +++ b/core/src/main/java/org/hibernate/impl/StatelessSessionImpl.java @@ -114,7 +114,7 @@ public Serializable insert(String entityName, Object entity) { else { persister.insert(id, state, entity, this); } - persister.setIdentifier(entity, id, EntityMode.POJO); + persister.setIdentifier( entity, id, this ); return id; } @@ -253,7 +253,7 @@ public Object instantiate( Serializable id) throws HibernateException { errorIfClosed(); return getFactory().getEntityPersister( entityName ) - .instantiate( id, EntityMode.POJO ); + .instantiate( id, this ); } public Object internalLoad( diff --git a/core/src/main/java/org/hibernate/metadata/ClassMetadata.java b/core/src/main/java/org/hibernate/metadata/ClassMetadata.java index 555069adc9..ac5068a4cf 100644 --- a/core/src/main/java/org/hibernate/metadata/ClassMetadata.java +++ b/core/src/main/java/org/hibernate/metadata/ClassMetadata.java @@ -152,9 +152,22 @@ public Object[] getPropertyValuesToInsert(Object entity, Map mergeMap, SessionIm /** * Create a class instance initialized with the given identifier + * + * @deprecated Use {@link #instantiate(Serializable, SessionImplementor)} instead + * @noinspection JavaDoc */ public Object instantiate(Serializable id, EntityMode entityMode) throws HibernateException; + /** + * Create a class instance initialized with the given identifier + * + * @param id The identifier value to use (may be null to represent no value) + * @param session The session from which the request originated. + * + * @return The instantiated entity. + */ + public Object instantiate(Serializable id, SessionImplementor session); + /** * Get the value of a particular (named) property */ @@ -186,9 +199,28 @@ public Object[] getPropertyValuesToInsert(Object entity, Map mergeMap, SessionIm public Serializable getIdentifier(Object entity, EntityMode entityMode) throws HibernateException; /** - * Set the identifier of an instance (or do nothing if no identifier property) + * Inject the identifier value into the given entity. + *

+ * Has no effect if the entity does not define an identifier property + * + * @param entity The entity to inject with the identifier value. + * @param id The value to be injected as the identifier. + * @param entityMode The entity mode + * + * @deprecated Use {@link #setIdentifier(Object, Serializable, SessionImplementor)} instead. + * @noinspection JavaDoc */ - public void setIdentifier(Object object, Serializable id, EntityMode entityMode) throws HibernateException; + public void setIdentifier(Object entity, Serializable id, EntityMode entityMode) throws HibernateException; + + /** + * Inject the identifier value into the given entity. + * + * @param entity The entity to inject with the identifier value. + * @param id The value to be injected as the identifier. + * @param session The session from which is requests originates + */ + public void setIdentifier(Object entity, Serializable id, SessionImplementor session); + /** * Does the class implement the Lifecycle interface? diff --git a/core/src/main/java/org/hibernate/persister/entity/AbstractEntityPersister.java b/core/src/main/java/org/hibernate/persister/entity/AbstractEntityPersister.java index c2388de8cd..5283a703e7 100644 --- a/core/src/main/java/org/hibernate/persister/entity/AbstractEntityPersister.java +++ b/core/src/main/java/org/hibernate/persister/entity/AbstractEntityPersister.java @@ -3801,9 +3801,19 @@ public Serializable getIdentifier(Object object, EntityMode entityMode) return getTuplizer( entityMode ).getIdentifier( object ); } - public void setIdentifier(Object object, Serializable id, EntityMode entityMode) + /** + * {@inheritDoc} + */ + public void setIdentifier(Object entity, Serializable id, EntityMode entityMode) throws HibernateException { - getTuplizer( entityMode ).setIdentifier( object, id ); + getTuplizer( entityMode ).setIdentifier( entity, id, null ); + } + + /** + * {@inheritDoc} + */ + public void setIdentifier(Object entity, Serializable id, SessionImplementor session) { + getTuplizer( session ).setIdentifier( entity, id, session ); } public Object getVersion(Object object, EntityMode entityMode) @@ -3811,9 +3821,20 @@ public Object getVersion(Object object, EntityMode entityMode) return getTuplizer( entityMode ).getVersion( object ); } + /** + * {@inheritDoc} + */ public Object instantiate(Serializable id, EntityMode entityMode) throws HibernateException { - return getTuplizer( entityMode ).instantiate( id ); + return getTuplizer( entityMode ).instantiate( id, null ); + } + + /** + * {@inheritDoc} + */ + public Object instantiate(Serializable id, SessionImplementor session) + throws HibernateException { + return getTuplizer( session ).instantiate( id, session ); } public boolean isInstance(Object object, EntityMode entityMode) { @@ -3825,9 +3846,16 @@ public boolean hasUninitializedLazyProperties(Object object, EntityMode entityMo } public void resetIdentifier(Object entity, Serializable currentId, Object currentVersion, EntityMode entityMode) { - getTuplizer( entityMode ).resetIdentifier( entity, currentId, currentVersion ); + getTuplizer( entityMode ).resetIdentifier( entity, currentId, currentVersion, null ); } + public void resetIdentifier(Object entity, Serializable currentId, Object currentVersion, SessionImplementor session) { + getTuplizer( session ).resetIdentifier( entity, currentId, currentVersion, session ); + } + + /** + * {@inheritDoc} + */ public EntityPersister getSubclassEntityPersister( Object instance, SessionFactoryImplementor factory, diff --git a/core/src/main/java/org/hibernate/persister/entity/EntityPersister.java b/core/src/main/java/org/hibernate/persister/entity/EntityPersister.java index e9957531e7..dd1fa643a2 100644 --- a/core/src/main/java/org/hibernate/persister/entity/EntityPersister.java +++ b/core/src/main/java/org/hibernate/persister/entity/EntityPersister.java @@ -655,10 +655,28 @@ public Object createProxy(Serializable id, SessionImplementor session) */ public Serializable getIdentifier(Object object, EntityMode entityMode) throws HibernateException; - /** - * Set the identifier of an instance (or do nothing if no identifier property) - */ - public void setIdentifier(Object object, Serializable id, EntityMode entityMode) throws HibernateException; + /** + * Inject the identifier value into the given entity. + *

+ * Has no effect if the entity does not define an identifier property + * + * @param entity The entity to inject with the identifier value. + * @param id The value to be injected as the identifier. + * @param entityMode The entity mode + * + * @deprecated Use {@link #setIdentifier(Object, Serializable, SessionImplementor)} instead. + * @noinspection JavaDoc + */ + public void setIdentifier(Object entity, Serializable id, EntityMode entityMode) throws HibernateException; + + /** + * Inject the identifier value into the given entity. + * + * @param entity The entity to inject with the identifier value. + * @param id The value to be injected as the identifier. + * @param session The session from which is requests originates + */ + public void setIdentifier(Object entity, Serializable id, SessionImplementor session); /** * Get the version number (or timestamp) from the object's version property (or return null if not versioned) @@ -667,9 +685,22 @@ public Object createProxy(Serializable id, SessionImplementor session) /** * Create a class instance initialized with the given identifier + * + * @deprecated Use {@link #instantiate(Serializable, SessionImplementor)} instead + * @noinspection JavaDoc */ public Object instantiate(Serializable id, EntityMode entityMode) throws HibernateException; + /** + * Create a class instance initialized with the given identifier + * + * @param id The identifier value to use (may be null to represent no value) + * @param session The session from which the request originated. + * + * @return The instantiated entity. + */ + public Object instantiate(Serializable id, SessionImplementor session); + /** * Is the given object an instance of this entity? */ @@ -687,9 +718,21 @@ public Object createProxy(Serializable id, SessionImplementor session) * @param currentId The currently assigned identifier value. * @param currentVersion The currently assigned version value. * @param entityMode The entity mode represented by the entity instance. + * + * @deprecated Use {@link #resetIdentifier(Object, Serializable, Object, SessionImplementor)} instead */ public void resetIdentifier(Object entity, Serializable currentId, Object currentVersion, EntityMode entityMode); + /** + * Set the identifier and version of the given instance back to its "unsaved" value. + * + * @param entity The entity instance + * @param currentId The currently assigned identifier value. + * @param currentVersion The currently assigned version value. + * @param session The session from which the request originated. + */ + public void resetIdentifier(Object entity, Serializable currentId, Object currentVersion, SessionImplementor session); + /** * A request has already identified the entity-name of this persister as the mapping for the given instance. * However, we still need to account for possible subclassing and potentially re-route to the more appropriate diff --git a/core/src/main/java/org/hibernate/tuple/entity/AbstractEntityTuplizer.java b/core/src/main/java/org/hibernate/tuple/entity/AbstractEntityTuplizer.java index 867422a287..faa9f8afae 100644 --- a/core/src/main/java/org/hibernate/tuple/entity/AbstractEntityTuplizer.java +++ b/core/src/main/java/org/hibernate/tuple/entity/AbstractEntityTuplizer.java @@ -236,8 +236,19 @@ public Serializable getIdentifier(Object entity) throws HibernateException { } } - + /** + * {@inheritDoc} + */ public void setIdentifier(Object entity, Serializable id) throws HibernateException { + // 99% of the time the session is not needed. Its only needed for certain brain-dead + // interpretations of JPA 2 "derived identity" support + setIdentifier( entity, id, null ); + } + + /** + * {@inheritDoc} + */ + public void setIdentifier(Object entity, Serializable id, SessionImplementor session) { if ( entityMetamodel.getIdentifierProperty().isEmbedded() ) { if ( entity != id ) { AbstractComponentType copier = (AbstractComponentType) entityMetamodel.getIdentifierProperty().getType(); @@ -265,16 +276,31 @@ else if ( identifierMapperType != null ) { } } + /** + * {@inheritDoc} + */ public void resetIdentifier(Object entity, Serializable currentId, Object currentVersion) { + // 99% of the time the session is not needed. Its only needed for certain brain-dead + // interpretations of JPA 2 "derived identity" support + resetIdentifier( entity, currentId, currentVersion, null ); + } + + /** + * {@inheritDoc} + */ + public void resetIdentifier( + Object entity, + Serializable currentId, + Object currentVersion, + SessionImplementor session) { if ( entityMetamodel.getIdentifierProperty().getIdentifierGenerator() instanceof Assigned ) { - //return currentId; } else { //reset the id Serializable result = entityMetamodel.getIdentifierProperty() .getUnsavedValue() .getDefaultValue( currentId ); - setIdentifier( entity, result ); + setIdentifier( entity, result, session ); //reset the version VersionProperty versionProperty = entityMetamodel.getVersionProperty(); if ( entityMetamodel.isVersioned() ) { @@ -282,10 +308,8 @@ public void resetIdentifier(Object entity, Serializable currentId, Object curren entity, entityMetamodel.getVersionPropertyIndex(), versionProperty.getUnsavedValue().getDefaultValue( currentVersion ) - ); + ); } - //return the id, so we can use it to reset the proxy id - //return result; } } @@ -421,15 +445,21 @@ public void setPropertyValue(Object entity, String propertyName, Object value) t } public final Object instantiate(Serializable id) throws HibernateException { + // 99% of the time the session is not needed. Its only needed for certain brain-dead + // interpretations of JPA 2 "derived identity" support + return instantiate( id, null ); + } + + public final Object instantiate(Serializable id, SessionImplementor session) { Object result = getInstantiator().instantiate( id ); if ( id != null ) { - setIdentifier( result, id ); + setIdentifier( result, id, session ); } return result; } public final Object instantiate() throws HibernateException { - return instantiate( null ); + return instantiate( null, null ); } public void afterInitialize(Object entity, boolean lazyPropertiesAreUnfetched, SessionImplementor session) {} diff --git a/core/src/main/java/org/hibernate/tuple/entity/EntityTuplizer.java b/core/src/main/java/org/hibernate/tuple/entity/EntityTuplizer.java index 9f0ee33bb7..57872eedd9 100644 --- a/core/src/main/java/org/hibernate/tuple/entity/EntityTuplizer.java +++ b/core/src/main/java/org/hibernate/tuple/entity/EntityTuplizer.java @@ -59,9 +59,22 @@ public interface EntityTuplizer extends Tuplizer { * @param id The identifier value for the entity to be instantiated. * @return The instantiated entity. * @throws HibernateException + * + * @deprecated Use {@link #instantiate(Serializable, SessionImplementor)} instead. + * @noinspection JavaDoc */ public Object instantiate(Serializable id) throws HibernateException; + /** + * Create an entity instance initialized with the given identifier. + * + * @param id The identifier value for the entity to be instantiated. + * @param session The session from which is requests originates + * + * @return The instantiated entity. + */ + public Object instantiate(Serializable id, SessionImplementor session); + /** * Extract the identifier value from the given entity. * @@ -79,19 +92,46 @@ public interface EntityTuplizer extends Tuplizer { * * @param entity The entity to inject with the identifier value. * @param id The value to be injected as the identifier. - * @throws HibernateException + * + * @deprecated Use {@link #setIdentifier(Object, Serializable, SessionImplementor)} instead. + * @noinspection JavaDoc */ public void setIdentifier(Object entity, Serializable id) throws HibernateException; + /** + * Inject the identifier value into the given entity. + *

+ * Has no effect if the entity does not define an identifier property + * + * @param entity The entity to inject with the identifier value. + * @param id The value to be injected as the identifier. + * @param session The session from which is requests originates + */ + public void setIdentifier(Object entity, Serializable id, SessionImplementor session); + /** * Inject the given identifier and version into the entity, in order to * "roll back" to their original values. * + * @param entity The entity for which to reset the id/version values * @param currentId The identifier value to inject into the entity. * @param currentVersion The version value to inject into the entity. + * + * @deprecated Use {@link #resetIdentifier(Object, Serializable, Object, SessionImplementor)} instead */ public void resetIdentifier(Object entity, Serializable currentId, Object currentVersion); + /** + * Inject the given identifier and version into the entity, in order to + * "roll back" to their original values. + * + * @param entity The entity for which to reset the id/version values + * @param currentId The identifier value to inject into the entity. + * @param currentVersion The version value to inject into the entity. + * @param session The session from which the request originated + */ + public void resetIdentifier(Object entity, Serializable currentId, Object currentVersion, SessionImplementor session); + /** * Extract the value of the version property from the given entity. * diff --git a/core/src/main/java/org/hibernate/type/EntityType.java b/core/src/main/java/org/hibernate/type/EntityType.java index 929c99e452..c97d91b14a 100644 --- a/core/src/main/java/org/hibernate/type/EntityType.java +++ b/core/src/main/java/org/hibernate/type/EntityType.java @@ -276,7 +276,7 @@ public Object replace( if ( session.getContextEntityIdentifier( original ) == null && ForeignKeys.isTransient( associatedEntityName, original, Boolean.FALSE, session ) ) { final Object copy = session.getFactory().getEntityPersister( associatedEntityName ) - .instantiate( null, session.getEntityMode() ); + .instantiate( null, session ); //TODO: should this be Session.instantiate(Persister, ...)? copyCache.put( original, copy ); return copy; diff --git a/testsuite/src/test/java/org/hibernate/test/legacy/CustomPersister.java b/testsuite/src/test/java/org/hibernate/test/legacy/CustomPersister.java index 6213185b6f..d139289a9a 100644 --- a/testsuite/src/test/java/org/hibernate/test/legacy/CustomPersister.java +++ b/testsuite/src/test/java/org/hibernate/test/legacy/CustomPersister.java @@ -62,6 +62,10 @@ private void checkEntityMode(EntityMode entityMode) { } } + private void checkEntityMode(SessionImplementor session) { + checkEntityMode( session.getEntityMode() ); + } + public boolean isInherited() { return false; } @@ -183,6 +187,11 @@ public void setIdentifier(Object object, Serializable id, EntityMode entityMode) ( (Custom) object ).id = (String) id; } + public void setIdentifier(Object entity, Serializable id, SessionImplementor session) { + checkEntityMode( session ); + ( (Custom) entity ).id = (String) id; + } + public Object getVersion(Object object, EntityMode entityMode) throws HibernateException { checkEntityMode( entityMode ); return null; @@ -190,11 +199,20 @@ public Object getVersion(Object object, EntityMode entityMode) throws HibernateE public Object instantiate(Serializable id, EntityMode entityMode) throws HibernateException { checkEntityMode( entityMode ); + return instantiate( id ); + } + + private Object instantiate(Serializable id) { Custom c = new Custom(); c.id = (String) id; return c; } + public Object instantiate(Serializable id, SessionImplementor session) { + checkEntityMode( session ); + return instantiate( id ); + } + public boolean isInstance(Object object, EntityMode entityMode) { checkEntityMode( entityMode ); return object instanceof Custom; @@ -210,6 +228,11 @@ public void resetIdentifier(Object entity, Serializable currentId, Object curren ( ( Custom ) entity ).id = ( String ) currentId; } + public void resetIdentifier(Object entity, Serializable currentId, Object currentVersion, SessionImplementor session) { + checkEntityMode( session ); + ( ( Custom ) entity ).id = ( String ) currentId; + } + public EntityPersister getSubclassEntityPersister(Object instance, SessionFactoryImplementor factory, EntityMode entityMode) { checkEntityMode( entityMode ); return this;