Author: steve.ebersole(a)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;