modernize Interceptor + Lifecycle interfaces
This commit is contained in:
parent
b3aa7d0794
commit
7b7597f40e
|
@ -7,128 +7,20 @@
|
|||
package org.hibernate;
|
||||
|
||||
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.
|
||||
*
|
||||
* @author Gavin King
|
||||
*
|
||||
* @deprecated implement {@link Interceptor} directly
|
||||
*/
|
||||
@Deprecated
|
||||
public class EmptyInterceptor implements Interceptor, Serializable {
|
||||
/**
|
||||
* The singleton reference.
|
||||
*/
|
||||
public static final Interceptor INSTANCE = new 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 {
|
||||
}
|
||||
protected EmptyInterceptor() {}
|
||||
}
|
||||
|
|
|
@ -32,7 +32,6 @@ import org.hibernate.type.Type;
|
|||
* @see SessionBuilder#interceptor(Interceptor)
|
||||
* @see SharedSessionBuilder#interceptor()
|
||||
* @see org.hibernate.cfg.Configuration#setInterceptor(Interceptor)
|
||||
* @see EmptyInterceptor
|
||||
*
|
||||
* @author Gavin King
|
||||
*/
|
||||
|
@ -53,8 +52,73 @@ public interface Interceptor {
|
|||
* @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.
|
||||
*
|
||||
* @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
|
||||
|
@ -77,13 +141,40 @@ public interface Interceptor {
|
|||
*
|
||||
* @throws CallbackException Thrown if the interceptor encounters any problems handling the callback.
|
||||
*/
|
||||
boolean onFlushDirty(
|
||||
default boolean onFlushDirty(
|
||||
Object entity,
|
||||
Serializable id,
|
||||
Object id,
|
||||
Object[] currentState,
|
||||
Object[] previousState,
|
||||
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
|
||||
|
@ -99,7 +190,30 @@ public interface Interceptor {
|
|||
*
|
||||
* @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>.
|
||||
|
@ -112,7 +226,25 @@ public interface Interceptor {
|
|||
*
|
||||
* @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.
|
||||
|
@ -122,7 +254,24 @@ public interface Interceptor {
|
|||
*
|
||||
* @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.
|
||||
|
@ -132,7 +281,24 @@ public interface Interceptor {
|
|||
*
|
||||
* @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.
|
||||
|
@ -142,8 +308,11 @@ public interface Interceptor {
|
|||
*
|
||||
* @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.
|
||||
*
|
||||
|
@ -151,7 +320,7 @@ public interface Interceptor {
|
|||
*
|
||||
* @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
|
||||
|
@ -161,7 +330,7 @@ public interface Interceptor {
|
|||
*
|
||||
* @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
|
||||
|
@ -175,7 +344,41 @@ public interface Interceptor {
|
|||
* @param entity a transient or detached entity
|
||||
* @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
|
||||
|
@ -196,13 +399,18 @@ public interface Interceptor {
|
|||
*
|
||||
* @throws CallbackException Thrown if the interceptor encounters any problems handling the callback.
|
||||
*/
|
||||
int[] findDirty(
|
||||
default int[] findDirty(
|
||||
Object entity,
|
||||
Serializable id,
|
||||
Object id,
|
||||
Object[] currentState,
|
||||
Object[] previousState,
|
||||
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
|
||||
|
@ -220,7 +428,9 @@ public interface Interceptor {
|
|||
* @deprecated Use {@link #instantiate(String, EntityRepresentationStrategy, Object)} instead
|
||||
*/
|
||||
@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
|
||||
|
@ -231,7 +441,10 @@ public interface Interceptor {
|
|||
String entityName,
|
||||
EntityRepresentationStrategy representationStrategy,
|
||||
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.
|
||||
*/
|
||||
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.
|
||||
|
@ -255,7 +487,12 @@ public interface Interceptor {
|
|||
*
|
||||
* @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>
|
||||
|
@ -264,21 +501,21 @@ public interface Interceptor {
|
|||
*
|
||||
* @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).
|
||||
*
|
||||
* @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.
|
||||
*
|
||||
* @param tx The Hibernate transaction facade object
|
||||
*/
|
||||
void afterTransactionCompletion(Transaction tx);
|
||||
default void afterTransactionCompletion(Transaction tx) {}
|
||||
|
||||
/**
|
||||
* Called when sql string is being prepared.
|
||||
|
@ -289,5 +526,7 @@ public interface Interceptor {
|
|||
* to inspect and alter SQL statements.
|
||||
*/
|
||||
@Deprecated
|
||||
String onPrepareStatement(String sql);
|
||||
default String onPrepareStatement(String sql) {
|
||||
return sql;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -5,11 +5,12 @@
|
|||
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
|
||||
*/
|
||||
package org.hibernate.classic;
|
||||
import java.io.Serializable;
|
||||
|
||||
import org.hibernate.CallbackException;
|
||||
import org.hibernate.Session;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* Provides callbacks from the <tt>Session</tt> to the persistent object.
|
||||
* 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)
|
||||
*/
|
||||
public static final boolean VETO = true;
|
||||
boolean VETO = true;
|
||||
|
||||
/**
|
||||
* Return value to accept the action (false)
|
||||
*/
|
||||
public static final boolean NO_VETO = false;
|
||||
boolean NO_VETO = false;
|
||||
|
||||
/**
|
||||
* Called when an entity is saved.
|
||||
|
@ -59,7 +60,9 @@ public interface Lifecycle {
|
|||
* @return true to veto save
|
||||
* @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>.
|
||||
|
@ -69,7 +72,9 @@ public interface Lifecycle {
|
|||
* @return true to veto update
|
||||
* @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.
|
||||
|
@ -77,7 +82,9 @@ public interface Lifecycle {
|
|||
* @return true to veto delete
|
||||
* @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
|
||||
|
@ -88,5 +95,23 @@ public interface Lifecycle {
|
|||
* @param s the session
|
||||
* @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) {}
|
||||
}
|
||||
|
|
|
@ -262,7 +262,7 @@ public abstract class AbstractFlushingEventListener implements JpaBootstrapSensi
|
|||
persistenceContext.forEachCollectionEntry(
|
||||
(coll, ce) -> {
|
||||
if ( ce.isDorecreate() ) {
|
||||
interceptor.onCollectionRecreate( coll, (Serializable) ce.getCurrentKey() );
|
||||
interceptor.onCollectionRecreate( coll, ce.getCurrentKey() );
|
||||
actionQueue.addAction(
|
||||
new CollectionRecreateAction(
|
||||
coll,
|
||||
|
@ -273,7 +273,7 @@ public abstract class AbstractFlushingEventListener implements JpaBootstrapSensi
|
|||
);
|
||||
}
|
||||
if ( ce.isDoremove() ) {
|
||||
interceptor.onCollectionRemove( coll, (Serializable) ce.getLoadedKey() );
|
||||
interceptor.onCollectionRemove( coll, ce.getLoadedKey() );
|
||||
actionQueue.addAction(
|
||||
new CollectionRemoveAction(
|
||||
coll,
|
||||
|
@ -285,7 +285,7 @@ public abstract class AbstractFlushingEventListener implements JpaBootstrapSensi
|
|||
);
|
||||
}
|
||||
if ( ce.isDoupdate() ) {
|
||||
interceptor.onCollectionUpdate( coll, (Serializable) ce.getLoadedKey() );
|
||||
interceptor.onCollectionUpdate( coll, ce.getLoadedKey() );
|
||||
actionQueue.addAction(
|
||||
new CollectionUpdateAction(
|
||||
coll,
|
||||
|
|
|
@ -400,7 +400,7 @@ public abstract class AbstractSaveEventListener
|
|||
SessionImplementor source) {
|
||||
boolean substitute = source.getInterceptor().onSave(
|
||||
entity,
|
||||
(Serializable) id,
|
||||
id,
|
||||
values,
|
||||
persister.getPropertyNames(),
|
||||
persister.getPropertyTypes()
|
||||
|
|
|
@ -267,7 +267,7 @@ public class DefaultDeleteEventListener implements DeleteEventListener, Callback
|
|||
|
||||
session.getInterceptor().onDelete(
|
||||
entity,
|
||||
(Serializable) entityEntry.getId(),
|
||||
entityEntry.getId(),
|
||||
deletedState,
|
||||
persister.getPropertyNames(),
|
||||
propTypes
|
||||
|
|
|
@ -340,7 +340,7 @@ public class DefaultFlushEntityEventListener implements FlushEntityEventListener
|
|||
|
||||
final boolean answerFromInterceptor = session.getInterceptor().onFlushDirty(
|
||||
entity,
|
||||
(Serializable) entry.getId(),
|
||||
entry.getId(),
|
||||
values,
|
||||
entry.getLoadedState(),
|
||||
persister.getPropertyNames(),
|
||||
|
@ -486,7 +486,7 @@ public class DefaultFlushEntityEventListener implements FlushEntityEventListener
|
|||
|
||||
int[] dirtyProperties = session.getInterceptor().findDirty(
|
||||
entity,
|
||||
(Serializable) id,
|
||||
id,
|
||||
values,
|
||||
loadedState,
|
||||
persister.getPropertyNames(),
|
||||
|
|
|
@ -76,7 +76,7 @@ public class DefaultPostLoadEventListener implements PostLoadEventListener, Call
|
|||
protected void invokeLoadLifecycle(PostLoadEvent event, EventSource session) {
|
||||
if ( event.getPersister().implementsLifecycle() ) {
|
||||
//log.debug( "calling onLoad()" );
|
||||
( (Lifecycle) event.getEntity() ).onLoad( session, (Serializable) event.getId() );
|
||||
( (Lifecycle) event.getEntity() ).onLoad( session, event.getId() );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -24,7 +24,7 @@ public class DefaultPreLoadEventListener implements PreLoadEventListener {
|
|||
final EntityPersister persister = event.getPersister();
|
||||
event.getSession().getInterceptor().onLoad(
|
||||
event.getEntity(),
|
||||
(Serializable) event.getId(),
|
||||
event.getId(),
|
||||
event.getState(),
|
||||
persister.getPropertyNames(),
|
||||
persister.getPropertyTypes()
|
||||
|
|
|
@ -538,7 +538,7 @@ public class SessionImpl
|
|||
// logically, is PersistentContext the "thing" to which an interceptor gets attached?
|
||||
final Object result = persistenceContext.getEntity( key );
|
||||
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 ) {
|
||||
lock( newObject, LockMode.NONE );
|
||||
}
|
||||
|
|
|
@ -475,7 +475,7 @@ public class StatelessSessionImpl extends AbstractSharedSessionContract implemen
|
|||
return result;
|
||||
}
|
||||
|
||||
final Object newObject = getInterceptor().getEntity( key.getEntityName(), (Serializable) key.getIdentifier() );
|
||||
final Object newObject = getInterceptor().getEntity( key.getEntityName(), key.getIdentifier() );
|
||||
if ( newObject != null ) {
|
||||
persistenceContext.addEntity( key, newObject );
|
||||
return newObject;
|
||||
|
|
|
@ -128,7 +128,7 @@ public class Foo implements Lifecycle, FooProxy, Serializable {
|
|||
return NO_VETO;
|
||||
}
|
||||
|
||||
public void onLoad(Session db, Serializable id) {
|
||||
public void onLoad(Session db, Object id) {
|
||||
}
|
||||
|
||||
public String getKey() {
|
||||
|
|
|
@ -96,7 +96,7 @@ public class Fum implements Lifecycle, Serializable {
|
|||
}
|
||||
|
||||
|
||||
public void onLoad(Session s, Serializable id) {
|
||||
public void onLoad(Session s, Object id) {
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -105,7 +105,7 @@ public class Glarch extends Super implements GlarchProxy, Lifecycle, Named, Seri
|
|||
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");
|
||||
}
|
||||
|
||||
|
|
|
@ -65,7 +65,7 @@ public class Qux implements Lifecycle {
|
|||
return NO_VETO;
|
||||
}
|
||||
|
||||
public void onLoad(Session session, Serializable id) {
|
||||
public void onLoad(Session session, Object id) {
|
||||
loaded=true;
|
||||
this.session=session;
|
||||
}
|
||||
|
|
|
@ -64,7 +64,7 @@ public class Vetoer implements Lifecycle {
|
|||
return result;
|
||||
}
|
||||
|
||||
public void onLoad(Session s, Serializable id) {}
|
||||
public void onLoad(Session s, Object id) {}
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -107,7 +107,7 @@ public abstract class BaseEnversEventListener implements EnversListener {
|
|||
toEntityName = session.guessEntityName( value );
|
||||
|
||||
final IdMapper idMapper = enversService.getEntitiesConfigurations().get( toEntityName ).getIdMapper();
|
||||
id = (Serializable) idMapper.mapToIdFromEntity( value );
|
||||
id = idMapper.mapToIdFromEntity( value );
|
||||
}
|
||||
|
||||
final Set<String> toPropertyNames = enversService.getEntitiesConfigurations().getToPropertyNames(
|
||||
|
|
Loading…
Reference in New Issue