modernize Interceptor + Lifecycle interfaces

This commit is contained in:
Gavin King 2021-03-04 13:51:05 +01:00
parent b3aa7d0794
commit 7b7597f40e
17 changed files with 317 additions and 161 deletions

View File

@ -7,128 +7,20 @@
package org.hibernate; package org.hibernate;
import java.io.Serializable; import java.io.Serializable;
import java.util.Iterator;
import org.hibernate.type.Type;
/** /**
* An interceptor that does nothing. May be used as a base class for application-defined custom interceptors. * An interceptor that does nothing. May be used as a base class for application-defined custom interceptors.
* *
* @author Gavin King * @author Gavin King
*
* @deprecated implement {@link Interceptor} directly
*/ */
@Deprecated
public class EmptyInterceptor implements Interceptor, Serializable { public class EmptyInterceptor implements Interceptor, Serializable {
/** /**
* The singleton reference. * The singleton reference.
*/ */
public static final Interceptor INSTANCE = new EmptyInterceptor(); public static final Interceptor INSTANCE = new EmptyInterceptor();
protected EmptyInterceptor() { protected EmptyInterceptor() {}
}
@Override
public void onDelete(
Object entity,
Serializable id,
Object[] state,
String[] propertyNames,
Type[] types) {}
@Override
public boolean onFlushDirty(
Object entity,
Serializable id,
Object[] currentState,
Object[] previousState,
String[] propertyNames,
Type[] types) {
return false;
}
@Override
public boolean onLoad(
Object entity,
Serializable id,
Object[] state,
String[] propertyNames,
Type[] types) {
return false;
}
@Override
public boolean onSave(
Object entity,
Serializable id,
Object[] state,
String[] propertyNames,
Type[] types) {
return false;
}
@Override
public void postFlush(Iterator entities) {
}
@Override
public void preFlush(Iterator entities) {
}
@Override
public Boolean isTransient(Object entity) {
return null;
}
@Override
public Object instantiate(String entityName, EntityMode entityMode, Serializable id) {
return null;
}
@Override
public int[] findDirty(
Object entity,
Serializable id,
Object[] currentState,
Object[] previousState,
String[] propertyNames,
Type[] types) {
return null;
}
@Override
public String getEntityName(Object object) {
return null;
}
@Override
public Object getEntity(String entityName, Serializable id) {
return null;
}
@Override
public void afterTransactionBegin(Transaction tx) {
}
@Override
public void afterTransactionCompletion(Transaction tx) {
}
@Override
public void beforeTransactionCompletion(Transaction tx) {
}
@Override
public String onPrepareStatement(String sql) {
return sql;
}
@Override
public void onCollectionRemove(Object collection, Serializable key) throws CallbackException {
}
@Override
public void onCollectionRecreate(Object collection, Serializable key) throws CallbackException {
}
@Override
public void onCollectionUpdate(Object collection, Serializable key) throws CallbackException {
}
} }

View File

@ -32,7 +32,6 @@ import org.hibernate.type.Type;
* @see SessionBuilder#interceptor(Interceptor) * @see SessionBuilder#interceptor(Interceptor)
* @see SharedSessionBuilder#interceptor() * @see SharedSessionBuilder#interceptor()
* @see org.hibernate.cfg.Configuration#setInterceptor(Interceptor) * @see org.hibernate.cfg.Configuration#setInterceptor(Interceptor)
* @see EmptyInterceptor
* *
* @author Gavin King * @author Gavin King
*/ */
@ -53,8 +52,73 @@ public interface Interceptor {
* @return {@code true} if the user modified the <tt>state</tt> in any way. * @return {@code true} if the user modified the <tt>state</tt> in any way.
* *
* @throws CallbackException Thrown if the interceptor encounters any problems handling the callback. * @throws CallbackException Thrown if the interceptor encounters any problems handling the callback.
*
* @deprecated use {@link #onLoad(Object, Object, Object[], String[], Type[])}
*/ */
boolean onLoad(Object entity, Serializable id, Object[] state, String[] propertyNames, Type[] types) throws CallbackException; @Deprecated
default boolean onLoad(Object entity, Serializable id, Object[] state, String[] propertyNames, Type[] types)
throws CallbackException {
return false;
}
/**
* Called just before an object is initialized. The interceptor may change the <tt>state</tt>, which will
* be propagated to the persistent object. Note that when this method is called, <tt>entity</tt> will be
* an empty uninitialized instance of the class.
* <p/>
* NOTE: The indexes across the <tt>state</tt>, <tt>propertyNames</tt> and <tt>types</tt> arrays match.
*
* @param entity The entity instance being loaded
* @param id The identifier value being loaded
* @param state The entity state (which will be pushed into the entity instance)
* @param propertyNames The names of the entity properties, corresponding to the <tt>state</tt>.
* @param types The types of the entity properties, corresponding to the <tt>state</tt>.
*
* @return {@code true} if the user modified the <tt>state</tt> in any way.
*
* @throws CallbackException Thrown if the interceptor encounters any problems handling the callback.
*/
default boolean onLoad(Object entity, Object id, Object[] state, String[] propertyNames, Type[] types)
throws CallbackException {
if (id instanceof Serializable) {
return onLoad(entity, (Serializable) id, state, propertyNames, types);
}
return false;
}
/**
* Called when an object is detected to be dirty, during a flush. The interceptor may modify the detected
* <tt>currentState</tt>, which will be propagated to both the database and the persistent object.
* Note that not all flushes end in actual synchronization with the database, in which case the
* new <tt>currentState</tt> will be propagated to the object, but not necessarily (immediately) to
* the database. It is strongly recommended that the interceptor <b>not</b> modify the <tt>previousState</tt>.
* <p/>
* NOTE: The indexes across the <tt>currentState</tt>, <tt>previousState</tt>, <tt>propertyNames</tt> and
* <tt>types</tt> arrays match.
*
* @param entity The entity instance detected as being dirty and being flushed
* @param id The identifier of the entity
* @param currentState The entity's current state
* @param previousState The entity's previous (load time) state.
* @param propertyNames The names of the entity properties
* @param types The types of the entity properties
*
* @return {@code true} if the user modified the <tt>currentState</tt> in any way.
*
* @throws CallbackException Thrown if the interceptor encounters any problems handling the callback.
*
* @deprecated use {@link #onFlushDirty(Object, Object, Object[], Object[], String[], Type[])}
*/
@Deprecated
default boolean onFlushDirty(
Object entity,
Serializable id,
Object[] currentState,
Object[] previousState,
String[] propertyNames,
Type[] types) throws CallbackException {
return false;
}
/** /**
* Called when an object is detected to be dirty, during a flush. The interceptor may modify the detected * Called when an object is detected to be dirty, during a flush. The interceptor may modify the detected
@ -77,13 +141,40 @@ public interface Interceptor {
* *
* @throws CallbackException Thrown if the interceptor encounters any problems handling the callback. * @throws CallbackException Thrown if the interceptor encounters any problems handling the callback.
*/ */
boolean onFlushDirty( default boolean onFlushDirty(
Object entity, Object entity,
Serializable id, Object id,
Object[] currentState, Object[] currentState,
Object[] previousState, Object[] previousState,
String[] propertyNames, String[] propertyNames,
Type[] types) throws CallbackException; Type[] types) throws CallbackException {
if (id instanceof Serializable) {
return onFlushDirty(entity, (Serializable) id, currentState, previousState, propertyNames, types);
}
return false;
}
/**
* Called before an object is saved. The interceptor may modify the <tt>state</tt>, which will be used for
* the SQL <tt>INSERT</tt> and propagated to the persistent object.
*
* @param entity The entity instance whose state is being inserted
* @param id The identifier of the entity
* @param state The state of the entity which will be inserted
* @param propertyNames The names of the entity properties.
* @param types The types of the entity properties
*
* @return <tt>true</tt> if the user modified the <tt>state</tt> in any way.
*
* @throws CallbackException Thrown if the interceptor encounters any problems handling the callback.
*
* @deprecated use {@link #onSave(Object, Object, Object[], String[], Type[])}
*/
@Deprecated
default boolean onSave(Object entity, Serializable id, Object[] state, String[] propertyNames, Type[] types)
throws CallbackException {
return false;
}
/** /**
* Called before an object is saved. The interceptor may modify the <tt>state</tt>, which will be used for * Called before an object is saved. The interceptor may modify the <tt>state</tt>, which will be used for
@ -99,7 +190,30 @@ public interface Interceptor {
* *
* @throws CallbackException Thrown if the interceptor encounters any problems handling the callback. * @throws CallbackException Thrown if the interceptor encounters any problems handling the callback.
*/ */
boolean onSave(Object entity, Serializable id, Object[] state, String[] propertyNames, Type[] types) throws CallbackException; default boolean onSave(Object entity, Object id, Object[] state, String[] propertyNames, Type[] types)
throws CallbackException {
if (id instanceof Serializable) {
return onSave(entity, (Serializable) id, state, propertyNames, types);
}
return false;
}
/**
* Called before an object is deleted. It is not recommended that the interceptor modify the <tt>state</tt>.
*
* @param entity The entity instance being deleted
* @param id The identifier of the entity
* @param state The state of the entity
* @param propertyNames The names of the entity properties.
* @param types The types of the entity properties
*
* @throws CallbackException Thrown if the interceptor encounters any problems handling the callback.
*
* @deprecated use {@link #onDelete(Object, Object, Object[], String[], Type[])}
*/
@Deprecated
default void onDelete(Object entity, Serializable id, Object[] state, String[] propertyNames, Type[] types)
throws CallbackException {}
/** /**
* Called before an object is deleted. It is not recommended that the interceptor modify the <tt>state</tt>. * Called before an object is deleted. It is not recommended that the interceptor modify the <tt>state</tt>.
@ -112,7 +226,25 @@ public interface Interceptor {
* *
* @throws CallbackException Thrown if the interceptor encounters any problems handling the callback. * @throws CallbackException Thrown if the interceptor encounters any problems handling the callback.
*/ */
void onDelete(Object entity, Serializable id, Object[] state, String[] propertyNames, Type[] types) throws CallbackException; default void onDelete(Object entity, Object id, Object[] state, String[] propertyNames, Type[] types)
throws CallbackException {
if (id instanceof Serializable) {
onDelete(entity, (Serializable) id, state, propertyNames, types);
}
}
/**
* Called before a collection is (re)created.
*
* @param collection The collection instance.
* @param key The collection key value.
*
* @throws CallbackException Thrown if the interceptor encounters any problems handling the callback.
*
* @deprecated use {@link #onCollectionRecreate(Object, Object)}
*/
@Deprecated
default void onCollectionRecreate(Object collection, Serializable key) throws CallbackException {}
/** /**
* Called before a collection is (re)created. * Called before a collection is (re)created.
@ -122,7 +254,24 @@ public interface Interceptor {
* *
* @throws CallbackException Thrown if the interceptor encounters any problems handling the callback. * @throws CallbackException Thrown if the interceptor encounters any problems handling the callback.
*/ */
void onCollectionRecreate(Object collection, Serializable key) throws CallbackException; default void onCollectionRecreate(Object collection, Object key) throws CallbackException {
if (key instanceof Serializable) {
onCollectionRecreate(collection, (Serializable) key);
}
}
/**
* Called before a collection is deleted.
*
* @param collection The collection instance.
* @param key The collection key value.
*
* @throws CallbackException Thrown if the interceptor encounters any problems handling the callback.
*
* @deprecated use {@link #onCollectionRemove(Object, Object)}
*/
@Deprecated
default void onCollectionRemove(Object collection, Serializable key) throws CallbackException {}
/** /**
* Called before a collection is deleted. * Called before a collection is deleted.
@ -132,7 +281,24 @@ public interface Interceptor {
* *
* @throws CallbackException Thrown if the interceptor encounters any problems handling the callback. * @throws CallbackException Thrown if the interceptor encounters any problems handling the callback.
*/ */
void onCollectionRemove(Object collection, Serializable key) throws CallbackException; default void onCollectionRemove(Object collection, Object key) throws CallbackException {
if (key instanceof Serializable) {
onCollectionRemove(collection, (Serializable) key);
}
}
/**
* Called before a collection is updated.
*
* @param collection The collection instance.
* @param key The collection key value.
*
* @throws CallbackException Thrown if the interceptor encounters any problems handling the callback.
*
* @deprecated use {@link #onCollectionUpdate(Object, Object)}
*/
@Deprecated
default void onCollectionUpdate(Object collection, Serializable key) throws CallbackException {}
/** /**
* Called before a collection is updated. * Called before a collection is updated.
@ -142,8 +308,11 @@ public interface Interceptor {
* *
* @throws CallbackException Thrown if the interceptor encounters any problems handling the callback. * @throws CallbackException Thrown if the interceptor encounters any problems handling the callback.
*/ */
void onCollectionUpdate(Object collection, Serializable key) throws CallbackException; default void onCollectionUpdate(Object collection, Object key) throws CallbackException {
if (key instanceof Serializable) {
onCollectionUpdate(collection, (Serializable) key);
}
}
/** /**
* Called before a flush. * Called before a flush.
* *
@ -151,7 +320,7 @@ public interface Interceptor {
* *
* @throws CallbackException Thrown if the interceptor encounters any problems handling the callback. * @throws CallbackException Thrown if the interceptor encounters any problems handling the callback.
*/ */
void preFlush(Iterator entities) throws CallbackException; default void preFlush(Iterator<Object> entities) throws CallbackException {}
/** /**
* Called after a flush that actually ends in execution of the SQL statements required to synchronize * Called after a flush that actually ends in execution of the SQL statements required to synchronize
@ -161,7 +330,7 @@ public interface Interceptor {
* *
* @throws CallbackException Thrown if the interceptor encounters any problems handling the callback. * @throws CallbackException Thrown if the interceptor encounters any problems handling the callback.
*/ */
void postFlush(Iterator entities) throws CallbackException; default void postFlush(Iterator<Object> entities) throws CallbackException {}
/** /**
* Called to distinguish between transient and detached entities. The return value determines the * Called to distinguish between transient and detached entities. The return value determines the
@ -175,7 +344,41 @@ public interface Interceptor {
* @param entity a transient or detached entity * @param entity a transient or detached entity
* @return Boolean or <tt>null</tt> to choose default behaviour * @return Boolean or <tt>null</tt> to choose default behaviour
*/ */
Boolean isTransient(Object entity); default Boolean isTransient(Object entity) {
return null;
}
/**
* Called from <tt>flush()</tt>. The return value determines whether the entity is updated
* <ul>
* <li>an array of property indices - the entity is dirty
* <li>an empty array - the entity is not dirty
* <li><tt>null</tt> - use Hibernate's default dirty-checking algorithm
* </ul>
*
* @param entity The entity for which to find dirty properties.
* @param id The identifier of the entity
* @param currentState The current entity state as taken from the entity instance
* @param previousState The state of the entity when it was last synchronized (generally when it was loaded)
* @param propertyNames The names of the entity properties.
* @param types The types of the entity properties
*
* @return array of dirty property indices or {@code null} to indicate Hibernate should perform default behaviour
*
* @throws CallbackException Thrown if the interceptor encounters any problems handling the callback.
*
* @deprecated use {@link #findDirty(Object, Object, Object[], Object[], String[], Type[])}
*/
@Deprecated
default int[] findDirty(
Object entity,
Serializable id,
Object[] currentState,
Object[] previousState,
String[] propertyNames,
Type[] types) {
return null;
}
/** /**
* Called from <tt>flush()</tt>. The return value determines whether the entity is updated * Called from <tt>flush()</tt>. The return value determines whether the entity is updated
@ -196,13 +399,18 @@ public interface Interceptor {
* *
* @throws CallbackException Thrown if the interceptor encounters any problems handling the callback. * @throws CallbackException Thrown if the interceptor encounters any problems handling the callback.
*/ */
int[] findDirty( default int[] findDirty(
Object entity, Object entity,
Serializable id, Object id,
Object[] currentState, Object[] currentState,
Object[] previousState, Object[] previousState,
String[] propertyNames, String[] propertyNames,
Type[] types); Type[] types) {
if (id instanceof Serializable) {
return findDirty(entity, (Serializable) id, currentState, previousState, propertyNames, types);
}
return null;
}
/** /**
* Instantiate the entity class. Return <tt>null</tt> to indicate that Hibernate should use * Instantiate the entity class. Return <tt>null</tt> to indicate that Hibernate should use
@ -220,7 +428,9 @@ public interface Interceptor {
* @deprecated Use {@link #instantiate(String, EntityRepresentationStrategy, Object)} instead * @deprecated Use {@link #instantiate(String, EntityRepresentationStrategy, Object)} instead
*/ */
@Deprecated @Deprecated
Object instantiate(String entityName, EntityMode entityMode, Serializable id) throws CallbackException; default Object instantiate(String entityName, EntityMode entityMode, Serializable id) throws CallbackException {
return null;
}
/** /**
* Instantiate the entity. Return <tt>null</tt> to indicate that Hibernate should use * Instantiate the entity. Return <tt>null</tt> to indicate that Hibernate should use
@ -231,7 +441,10 @@ public interface Interceptor {
String entityName, String entityName,
EntityRepresentationStrategy representationStrategy, EntityRepresentationStrategy representationStrategy,
Object id) throws CallbackException { Object id) throws CallbackException {
return instantiate( entityName, representationStrategy.getMode().getLegacyEntityMode(), (Serializable) id ); if (id instanceof Serializable) {
return instantiate( entityName, representationStrategy.getMode().getLegacyEntityMode(), (Serializable) id );
}
return null;
} }
/** /**
@ -243,7 +456,26 @@ public interface Interceptor {
* *
* @throws CallbackException Thrown if the interceptor encounters any problems handling the callback. * @throws CallbackException Thrown if the interceptor encounters any problems handling the callback.
*/ */
String getEntityName(Object object) throws CallbackException; default String getEntityName(Object object) throws CallbackException {
return null;
}
/**
* Get a fully loaded entity instance that is cached externally.
*
* @param entityName the name of the entity
* @param id the instance identifier
*
* @return a fully initialized entity
*
* @throws CallbackException Thrown if the interceptor encounters any problems handling the callback.
*
* @deprecated use {@link #getEntity(String, Object)}
*/
@Deprecated
default Object getEntity(String entityName, Serializable id) throws CallbackException {
return null;
}
/** /**
* Get a fully loaded entity instance that is cached externally. * Get a fully loaded entity instance that is cached externally.
@ -255,7 +487,12 @@ public interface Interceptor {
* *
* @throws CallbackException Thrown if the interceptor encounters any problems handling the callback. * @throws CallbackException Thrown if the interceptor encounters any problems handling the callback.
*/ */
Object getEntity(String entityName, Serializable id) throws CallbackException; default Object getEntity(String entityName, Object id) throws CallbackException {
if (id instanceof Serializable) {
return getEntity(entityName, (Serializable) id);
}
return null;
}
/** /**
* Called when a Hibernate transaction is begun via the Hibernate <tt>Transaction</tt> * Called when a Hibernate transaction is begun via the Hibernate <tt>Transaction</tt>
@ -264,21 +501,21 @@ public interface Interceptor {
* *
* @param tx The Hibernate transaction facade object * @param tx The Hibernate transaction facade object
*/ */
void afterTransactionBegin(Transaction tx); default void afterTransactionBegin(Transaction tx) {}
/** /**
* Called before a transaction is committed (but not before rollback). * Called before a transaction is committed (but not before rollback).
* *
* @param tx The Hibernate transaction facade object * @param tx The Hibernate transaction facade object
*/ */
void beforeTransactionCompletion(Transaction tx); default void beforeTransactionCompletion(Transaction tx) {}
/** /**
* Called after a transaction is committed or rolled back. * Called after a transaction is committed or rolled back.
* *
* @param tx The Hibernate transaction facade object * @param tx The Hibernate transaction facade object
*/ */
void afterTransactionCompletion(Transaction tx); default void afterTransactionCompletion(Transaction tx) {}
/** /**
* Called when sql string is being prepared. * Called when sql string is being prepared.
@ -289,5 +526,7 @@ public interface Interceptor {
* to inspect and alter SQL statements. * to inspect and alter SQL statements.
*/ */
@Deprecated @Deprecated
String onPrepareStatement(String sql); default String onPrepareStatement(String sql) {
return sql;
}
} }

View File

@ -5,11 +5,12 @@
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>. * See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
*/ */
package org.hibernate.classic; package org.hibernate.classic;
import java.io.Serializable;
import org.hibernate.CallbackException; import org.hibernate.CallbackException;
import org.hibernate.Session; import org.hibernate.Session;
import java.io.Serializable;
/** /**
* Provides callbacks from the <tt>Session</tt> to the persistent object. * Provides callbacks from the <tt>Session</tt> to the persistent object.
* Persistent classes <b>may</b> implement this interface but they are not * Persistent classes <b>may</b> implement this interface but they are not
@ -46,12 +47,12 @@ public interface Lifecycle {
/** /**
* Return value to veto the action (true) * Return value to veto the action (true)
*/ */
public static final boolean VETO = true; boolean VETO = true;
/** /**
* Return value to accept the action (false) * Return value to accept the action (false)
*/ */
public static final boolean NO_VETO = false; boolean NO_VETO = false;
/** /**
* Called when an entity is saved. * Called when an entity is saved.
@ -59,7 +60,9 @@ public interface Lifecycle {
* @return true to veto save * @return true to veto save
* @throws CallbackException Indicates a problem happened during callback * @throws CallbackException Indicates a problem happened during callback
*/ */
public boolean onSave(Session s) throws CallbackException; default boolean onSave(Session s) throws CallbackException {
return NO_VETO;
}
/** /**
* Called when an entity is passed to <tt>Session.update()</tt>. * Called when an entity is passed to <tt>Session.update()</tt>.
@ -69,7 +72,9 @@ public interface Lifecycle {
* @return true to veto update * @return true to veto update
* @throws CallbackException Indicates a problem happened during callback * @throws CallbackException Indicates a problem happened during callback
*/ */
public boolean onUpdate(Session s) throws CallbackException; default boolean onUpdate(Session s) throws CallbackException {
return NO_VETO;
}
/** /**
* Called when an entity is deleted. * Called when an entity is deleted.
@ -77,7 +82,9 @@ public interface Lifecycle {
* @return true to veto delete * @return true to veto delete
* @throws CallbackException Indicates a problem happened during callback * @throws CallbackException Indicates a problem happened during callback
*/ */
public boolean onDelete(Session s) throws CallbackException; default boolean onDelete(Session s) throws CallbackException {
return NO_VETO;
}
/** /**
* Called after an entity is loaded. <em>It is illegal to * Called after an entity is loaded. <em>It is illegal to
@ -88,5 +95,23 @@ public interface Lifecycle {
* @param s the session * @param s the session
* @param id the identifier * @param id the identifier
*/ */
public void onLoad(Session s, Serializable id); default void onLoad(Session s, Object id) {
if (id instanceof Serializable) {
onLoad(s, (Serializable) id);
}
}
/**
* Called after an entity is loaded. <em>It is illegal to
* access the <tt>Session</tt> from inside this method.</em>
* However, the object may keep a reference to the session
* for later use.
*
* @param s the session
* @param id the identifier
*
* @deprecated use {@link #onLoad(Session, Object)}
*/
@Deprecated
default void onLoad(Session s, Serializable id) {}
} }

View File

@ -262,7 +262,7 @@ public abstract class AbstractFlushingEventListener implements JpaBootstrapSensi
persistenceContext.forEachCollectionEntry( persistenceContext.forEachCollectionEntry(
(coll, ce) -> { (coll, ce) -> {
if ( ce.isDorecreate() ) { if ( ce.isDorecreate() ) {
interceptor.onCollectionRecreate( coll, (Serializable) ce.getCurrentKey() ); interceptor.onCollectionRecreate( coll, ce.getCurrentKey() );
actionQueue.addAction( actionQueue.addAction(
new CollectionRecreateAction( new CollectionRecreateAction(
coll, coll,
@ -273,7 +273,7 @@ public abstract class AbstractFlushingEventListener implements JpaBootstrapSensi
); );
} }
if ( ce.isDoremove() ) { if ( ce.isDoremove() ) {
interceptor.onCollectionRemove( coll, (Serializable) ce.getLoadedKey() ); interceptor.onCollectionRemove( coll, ce.getLoadedKey() );
actionQueue.addAction( actionQueue.addAction(
new CollectionRemoveAction( new CollectionRemoveAction(
coll, coll,
@ -285,7 +285,7 @@ public abstract class AbstractFlushingEventListener implements JpaBootstrapSensi
); );
} }
if ( ce.isDoupdate() ) { if ( ce.isDoupdate() ) {
interceptor.onCollectionUpdate( coll, (Serializable) ce.getLoadedKey() ); interceptor.onCollectionUpdate( coll, ce.getLoadedKey() );
actionQueue.addAction( actionQueue.addAction(
new CollectionUpdateAction( new CollectionUpdateAction(
coll, coll,

View File

@ -400,7 +400,7 @@ public abstract class AbstractSaveEventListener
SessionImplementor source) { SessionImplementor source) {
boolean substitute = source.getInterceptor().onSave( boolean substitute = source.getInterceptor().onSave(
entity, entity,
(Serializable) id, id,
values, values,
persister.getPropertyNames(), persister.getPropertyNames(),
persister.getPropertyTypes() persister.getPropertyTypes()

View File

@ -267,7 +267,7 @@ public class DefaultDeleteEventListener implements DeleteEventListener, Callback
session.getInterceptor().onDelete( session.getInterceptor().onDelete(
entity, entity,
(Serializable) entityEntry.getId(), entityEntry.getId(),
deletedState, deletedState,
persister.getPropertyNames(), persister.getPropertyNames(),
propTypes propTypes

View File

@ -340,7 +340,7 @@ public class DefaultFlushEntityEventListener implements FlushEntityEventListener
final boolean answerFromInterceptor = session.getInterceptor().onFlushDirty( final boolean answerFromInterceptor = session.getInterceptor().onFlushDirty(
entity, entity,
(Serializable) entry.getId(), entry.getId(),
values, values,
entry.getLoadedState(), entry.getLoadedState(),
persister.getPropertyNames(), persister.getPropertyNames(),
@ -486,7 +486,7 @@ public class DefaultFlushEntityEventListener implements FlushEntityEventListener
int[] dirtyProperties = session.getInterceptor().findDirty( int[] dirtyProperties = session.getInterceptor().findDirty(
entity, entity,
(Serializable) id, id,
values, values,
loadedState, loadedState,
persister.getPropertyNames(), persister.getPropertyNames(),

View File

@ -76,7 +76,7 @@ public class DefaultPostLoadEventListener implements PostLoadEventListener, Call
protected void invokeLoadLifecycle(PostLoadEvent event, EventSource session) { protected void invokeLoadLifecycle(PostLoadEvent event, EventSource session) {
if ( event.getPersister().implementsLifecycle() ) { if ( event.getPersister().implementsLifecycle() ) {
//log.debug( "calling onLoad()" ); //log.debug( "calling onLoad()" );
( (Lifecycle) event.getEntity() ).onLoad( session, (Serializable) event.getId() ); ( (Lifecycle) event.getEntity() ).onLoad( session, event.getId() );
} }
} }
} }

View File

@ -24,7 +24,7 @@ public class DefaultPreLoadEventListener implements PreLoadEventListener {
final EntityPersister persister = event.getPersister(); final EntityPersister persister = event.getPersister();
event.getSession().getInterceptor().onLoad( event.getSession().getInterceptor().onLoad(
event.getEntity(), event.getEntity(),
(Serializable) event.getId(), event.getId(),
event.getState(), event.getState(),
persister.getPropertyNames(), persister.getPropertyNames(),
persister.getPropertyTypes() persister.getPropertyTypes()

View File

@ -538,7 +538,7 @@ public class SessionImpl
// logically, is PersistentContext the "thing" to which an interceptor gets attached? // logically, is PersistentContext the "thing" to which an interceptor gets attached?
final Object result = persistenceContext.getEntity( key ); final Object result = persistenceContext.getEntity( key );
if ( result == null ) { if ( result == null ) {
final Object newObject = getInterceptor().getEntity( key.getEntityName(), (Serializable) key.getIdentifier() ); final Object newObject = getInterceptor().getEntity( key.getEntityName(), key.getIdentifier() );
if ( newObject != null ) { if ( newObject != null ) {
lock( newObject, LockMode.NONE ); lock( newObject, LockMode.NONE );
} }

View File

@ -475,7 +475,7 @@ public class StatelessSessionImpl extends AbstractSharedSessionContract implemen
return result; return result;
} }
final Object newObject = getInterceptor().getEntity( key.getEntityName(), (Serializable) key.getIdentifier() ); final Object newObject = getInterceptor().getEntity( key.getEntityName(), key.getIdentifier() );
if ( newObject != null ) { if ( newObject != null ) {
persistenceContext.addEntity( key, newObject ); persistenceContext.addEntity( key, newObject );
return newObject; return newObject;

View File

@ -128,7 +128,7 @@ public class Foo implements Lifecycle, FooProxy, Serializable {
return NO_VETO; return NO_VETO;
} }
public void onLoad(Session db, Serializable id) { public void onLoad(Session db, Object id) {
} }
public String getKey() { public String getKey() {

View File

@ -96,7 +96,7 @@ public class Fum implements Lifecycle, Serializable {
} }
public void onLoad(Session s, Serializable id) { public void onLoad(Session s, Object id) {
} }

View File

@ -105,7 +105,7 @@ public class Glarch extends Super implements GlarchProxy, Lifecycle, Named, Seri
return NO_VETO; return NO_VETO;
} }
public void onLoad(Session s, Serializable id) { public void onLoad(Session s, Object id) {
if ( ! ( ( (String) id ).length()==32 ) ) throw new RuntimeException("id problem"); if ( ! ( ( (String) id ).length()==32 ) ) throw new RuntimeException("id problem");
} }

View File

@ -65,7 +65,7 @@ public class Qux implements Lifecycle {
return NO_VETO; return NO_VETO;
} }
public void onLoad(Session session, Serializable id) { public void onLoad(Session session, Object id) {
loaded=true; loaded=true;
this.session=session; this.session=session;
} }

View File

@ -64,7 +64,7 @@ public class Vetoer implements Lifecycle {
return result; return result;
} }
public void onLoad(Session s, Serializable id) {} public void onLoad(Session s, Object id) {}
} }

View File

@ -107,7 +107,7 @@ public abstract class BaseEnversEventListener implements EnversListener {
toEntityName = session.guessEntityName( value ); toEntityName = session.guessEntityName( value );
final IdMapper idMapper = enversService.getEntitiesConfigurations().get( toEntityName ).getIdMapper(); final IdMapper idMapper = enversService.getEntitiesConfigurations().get( toEntityName ).getIdMapper();
id = (Serializable) idMapper.mapToIdFromEntity( value ); id = idMapper.mapToIdFromEntity( value );
} }
final Set<String> toPropertyNames = enversService.getEntitiesConfigurations().getToPropertyNames( final Set<String> toPropertyNames = enversService.getEntitiesConfigurations().getToPropertyNames(