[hibernate-commits] Hibernate SVN: r18697 - in core/trunk: core/src/main/java/org/hibernate/event/def and 6 other directories.

hibernate-commits at lists.jboss.org hibernate-commits at lists.jboss.org
Thu Feb 4 16:05:39 EST 2010


Author: steve.ebersole at jboss.com
Date: 2010-02-04 16:05:38 -0500 (Thu, 04 Feb 2010)
New Revision: 18697

Modified:
   core/trunk/core/src/main/java/org/hibernate/action/EntityIdentityInsertAction.java
   core/trunk/core/src/main/java/org/hibernate/event/def/AbstractSaveEventListener.java
   core/trunk/core/src/main/java/org/hibernate/event/def/DefaultDeleteEventListener.java
   core/trunk/core/src/main/java/org/hibernate/event/def/DefaultLoadEventListener.java
   core/trunk/core/src/main/java/org/hibernate/event/def/DefaultMergeEventListener.java
   core/trunk/core/src/main/java/org/hibernate/event/def/DefaultSaveOrUpdateEventListener.java
   core/trunk/core/src/main/java/org/hibernate/event/def/DefaultUpdateEventListener.java
   core/trunk/core/src/main/java/org/hibernate/impl/SessionImpl.java
   core/trunk/core/src/main/java/org/hibernate/impl/StatelessSessionImpl.java
   core/trunk/core/src/main/java/org/hibernate/metadata/ClassMetadata.java
   core/trunk/core/src/main/java/org/hibernate/persister/entity/AbstractEntityPersister.java
   core/trunk/core/src/main/java/org/hibernate/persister/entity/EntityPersister.java
   core/trunk/core/src/main/java/org/hibernate/tuple/entity/AbstractEntityTuplizer.java
   core/trunk/core/src/main/java/org/hibernate/tuple/entity/EntityTuplizer.java
   core/trunk/core/src/main/java/org/hibernate/type/EntityType.java
   core/trunk/testsuite/src/test/java/org/hibernate/test/legacy/CustomPersister.java
Log:
HHH-4704 - Pass session into EntityTuplizer#setIdentifier


Modified: core/trunk/core/src/main/java/org/hibernate/action/EntityIdentityInsertAction.java
===================================================================
--- core/trunk/core/src/main/java/org/hibernate/action/EntityIdentityInsertAction.java	2010-02-04 20:07:08 UTC (rev 18696)
+++ core/trunk/core/src/main/java/org/hibernate/action/EntityIdentityInsertAction.java	2010-02-04 21:05:38 UTC (rev 18697)
@@ -74,7 +74,7 @@
 			}
 			//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 );
 		}
 
 

Modified: core/trunk/core/src/main/java/org/hibernate/event/def/AbstractSaveEventListener.java
===================================================================
--- core/trunk/core/src/main/java/org/hibernate/event/def/AbstractSaveEventListener.java	2010-02-04 20:07:08 UTC (rev 18696)
+++ core/trunk/core/src/main/java/org/hibernate/event/def/AbstractSaveEventListener.java	2010-02-04 21:05:38 UTC (rev 18697)
@@ -191,7 +191,7 @@
 					throw new NonUniqueObjectException( id, persister.getEntityName() );
 				}
 			}
-			persister.setIdentifier( entity, id, source.getEntityMode() );
+			persister.setIdentifier( entity, id, source );
 		}
 		else {
 			key = null;

Modified: core/trunk/core/src/main/java/org/hibernate/event/def/DefaultDeleteEventListener.java
===================================================================
--- core/trunk/core/src/main/java/org/hibernate/event/def/DefaultDeleteEventListener.java	2010-02-04 20:07:08 UTC (rev 18696)
+++ core/trunk/core/src/main/java/org/hibernate/event/def/DefaultDeleteEventListener.java	2010-02-04 21:05:38 UTC (rev 18697)
@@ -163,7 +163,7 @@
 		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 );
 		}
 	}
 

Modified: core/trunk/core/src/main/java/org/hibernate/event/def/DefaultLoadEventListener.java
===================================================================
--- core/trunk/core/src/main/java/org/hibernate/event/def/DefaultLoadEventListener.java	2010-02-04 20:07:08 UTC (rev 18696)
+++ core/trunk/core/src/main/java/org/hibernate/event/def/DefaultLoadEventListener.java	2010-02-04 21:05:38 UTC (rev 18697)
@@ -221,7 +221,7 @@
 						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);

Modified: core/trunk/core/src/main/java/org/hibernate/event/def/DefaultMergeEventListener.java
===================================================================
--- core/trunk/core/src/main/java/org/hibernate/event/def/DefaultMergeEventListener.java	2010-02-04 20:07:08 UTC (rev 18696)
+++ core/trunk/core/src/main/java/org/hibernate/event/def/DefaultMergeEventListener.java	2010-02-04 21:05:38 UTC (rev 18697)
@@ -292,10 +292,10 @@
 				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 );

Modified: core/trunk/core/src/main/java/org/hibernate/event/def/DefaultSaveOrUpdateEventListener.java
===================================================================
--- core/trunk/core/src/main/java/org/hibernate/event/def/DefaultSaveOrUpdateEventListener.java	2010-02-04 20:07:08 UTC (rev 18696)
+++ core/trunk/core/src/main/java/org/hibernate/event/def/DefaultSaveOrUpdateEventListener.java	2010-02-04 21:05:38 UTC (rev 18697)
@@ -239,7 +239,7 @@
 
 		event.setRequestedId(
 				getUpdateId(
-						entity, persister, event.getRequestedId(), event.getSession().getEntityMode()
+						entity, persister, event.getRequestedId(), event.getSession()
 				)
 		);
 
@@ -253,7 +253,7 @@
 	 * @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 @@
 			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

Modified: core/trunk/core/src/main/java/org/hibernate/event/def/DefaultUpdateEventListener.java
===================================================================
--- core/trunk/core/src/main/java/org/hibernate/event/def/DefaultUpdateEventListener.java	2010-02-04 20:07:08 UTC (rev 18696)
+++ core/trunk/core/src/main/java/org/hibernate/event/def/DefaultUpdateEventListener.java	2010-02-04 21:05:38 UTC (rev 18697)
@@ -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 @@
 	 * 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;
 		}
 	}

Modified: core/trunk/core/src/main/java/org/hibernate/impl/SessionImpl.java
===================================================================
--- core/trunk/core/src/main/java/org/hibernate/impl/SessionImpl.java	2010-02-04 20:07:08 UTC (rev 18696)
+++ core/trunk/core/src/main/java/org/hibernate/impl/SessionImpl.java	2010-02-04 21:05:38 UTC (rev 18697)
@@ -1409,7 +1409,7 @@
 		checkTransactionSynchStatus();
 		Object result = interceptor.instantiate( persister.getEntityName(), entityMode, id );
 		if ( result == null ) {
-			result = persister.instantiate( id, entityMode );
+			result = persister.instantiate( id, this );
 		}
 		return result;
 	}

Modified: core/trunk/core/src/main/java/org/hibernate/impl/StatelessSessionImpl.java
===================================================================
--- core/trunk/core/src/main/java/org/hibernate/impl/StatelessSessionImpl.java	2010-02-04 20:07:08 UTC (rev 18696)
+++ core/trunk/core/src/main/java/org/hibernate/impl/StatelessSessionImpl.java	2010-02-04 21:05:38 UTC (rev 18697)
@@ -114,7 +114,7 @@
 		else {
 			persister.insert(id, state, entity, this);
 		}
-		persister.setIdentifier(entity, id, EntityMode.POJO);
+		persister.setIdentifier( entity, id, this );
 		return id;
 	}
 
@@ -253,7 +253,7 @@
 	        Serializable id) throws HibernateException {
 		errorIfClosed();
 		return getFactory().getEntityPersister( entityName )
-				.instantiate( id, EntityMode.POJO );
+				.instantiate( id, this );
 	}
 
 	public Object internalLoad(

Modified: core/trunk/core/src/main/java/org/hibernate/metadata/ClassMetadata.java
===================================================================
--- core/trunk/core/src/main/java/org/hibernate/metadata/ClassMetadata.java	2010-02-04 20:07:08 UTC (rev 18696)
+++ core/trunk/core/src/main/java/org/hibernate/metadata/ClassMetadata.java	2010-02-04 21:05:38 UTC (rev 18697)
@@ -152,10 +152,23 @@
 
 	/**
 	 * 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
 	 */
 	public Object getPropertyValue(Object object, String propertyName, EntityMode entityMode) throws HibernateException;
@@ -186,11 +199,30 @@
 	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.
+	 * </p>
+	 * 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 <tt>Lifecycle</tt> interface?
 	 */
 	public boolean implementsLifecycle(EntityMode entityMode);

Modified: core/trunk/core/src/main/java/org/hibernate/persister/entity/AbstractEntityPersister.java
===================================================================
--- core/trunk/core/src/main/java/org/hibernate/persister/entity/AbstractEntityPersister.java	2010-02-04 20:07:08 UTC (rev 18696)
+++ core/trunk/core/src/main/java/org/hibernate/persister/entity/AbstractEntityPersister.java	2010-02-04 21:05:38 UTC (rev 18697)
@@ -3801,21 +3801,42 @@
 		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)
 			throws HibernateException {
 		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) {
 		return getTuplizer( entityMode ).isInstance( object );
 	}
@@ -3825,9 +3846,16 @@
 	}
 
 	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,

Modified: core/trunk/core/src/main/java/org/hibernate/persister/entity/EntityPersister.java
===================================================================
--- core/trunk/core/src/main/java/org/hibernate/persister/entity/EntityPersister.java	2010-02-04 20:07:08 UTC (rev 18696)
+++ core/trunk/core/src/main/java/org/hibernate/persister/entity/EntityPersister.java	2010-02-04 21:05:38 UTC (rev 18697)
@@ -655,11 +655,29 @@
 	 */
 	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.
+     * </p>
+     * 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,10 +685,23 @@
 
 	/**
 	 * 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?
 	 */
 	public boolean isInstance(Object object, EntityMode entityMode);
@@ -687,10 +718,22 @@
 	 * @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
 	 * persister.

Modified: core/trunk/core/src/main/java/org/hibernate/tuple/entity/AbstractEntityTuplizer.java
===================================================================
--- core/trunk/core/src/main/java/org/hibernate/tuple/entity/AbstractEntityTuplizer.java	2010-02-04 20:07:08 UTC (rev 18696)
+++ core/trunk/core/src/main/java/org/hibernate/tuple/entity/AbstractEntityTuplizer.java	2010-02-04 21:05:38 UTC (rev 18697)
@@ -236,8 +236,19 @@
 		}
 	}
 
+	/**
+	 * {@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 );
+	}
 
-	public void setIdentifier(Object entity, Serializable id) throws HibernateException {
+	/**
+	 * {@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 @@
 		}
 	}
 
+	/**
+	 * {@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 @@
 				        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 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) {}

Modified: core/trunk/core/src/main/java/org/hibernate/tuple/entity/EntityTuplizer.java
===================================================================
--- core/trunk/core/src/main/java/org/hibernate/tuple/entity/EntityTuplizer.java	2010-02-04 20:07:08 UTC (rev 18696)
+++ core/trunk/core/src/main/java/org/hibernate/tuple/entity/EntityTuplizer.java	2010-02-04 21:05:38 UTC (rev 18697)
@@ -59,10 +59,23 @@
      * @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.
      *
      * @param entity The entity from which to extract the identifier value.
@@ -79,19 +92,46 @@
      *
      * @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.
+     * </p>
+     * 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.
      *

Modified: core/trunk/core/src/main/java/org/hibernate/type/EntityType.java
===================================================================
--- core/trunk/core/src/main/java/org/hibernate/type/EntityType.java	2010-02-04 20:07:08 UTC (rev 18696)
+++ core/trunk/core/src/main/java/org/hibernate/type/EntityType.java	2010-02-04 21:05:38 UTC (rev 18697)
@@ -276,7 +276,7 @@
 			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;

Modified: core/trunk/testsuite/src/test/java/org/hibernate/test/legacy/CustomPersister.java
===================================================================
--- core/trunk/testsuite/src/test/java/org/hibernate/test/legacy/CustomPersister.java	2010-02-04 20:07:08 UTC (rev 18696)
+++ core/trunk/testsuite/src/test/java/org/hibernate/test/legacy/CustomPersister.java	2010-02-04 21:05:38 UTC (rev 18697)
@@ -62,6 +62,10 @@
 		}
 	}
 
+	private void checkEntityMode(SessionImplementor session) {
+		checkEntityMode( session.getEntityMode() );
+	}
+
 	public boolean isInherited() {
 		return false;
 	}
@@ -183,6 +187,11 @@
 		( (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 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 @@
 		( ( 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;



More information about the hibernate-commits mailing list