modernize Interceptor + Lifecycle interfaces
This commit is contained in:
parent
b3aa7d0794
commit
7b7597f40e
|
@ -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 {
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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) {}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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()
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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(),
|
||||||
|
|
|
@ -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() );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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()
|
||||||
|
|
|
@ -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 );
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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() {
|
||||||
|
|
|
@ -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;
|
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");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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) {}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -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(
|
||||||
|
|
Loading…
Reference in New Issue