Top Description Methods
org.hibernate

public Interface Interceptor

Known Direct Implementers
org.hibernate.EmptyInterceptor
Imports
java.io.Serializable, java.util.Iterator, org.hibernate.type.Type

Allows user code to inspect and/or change property values.

Inspection occurs before property values are written and after they are read from the database.

There might be a single instance of Interceptor for a SessionFactory, or a new instance might be specified for each Session. Whichever approach is used, the interceptor must be serializable if the Session is to be serializable. This means that SessionFactory-scoped interceptors should implement readResolve().

The Session may not be invoked from a callback (nor may a callback cause a collection or proxy to be lazily initialized).

Instead of implementing this interface directly, it is usually better to extend EmptyInterceptor and override only the callback methods of interest.
Author
Gavin King
See Also
SessionFactory#openSession(Interceptor), org.hibernate.cfg.Configuration#setInterceptor(Interceptor), EmptyInterceptor

Method Summary

Modifier and TypeMethod and Description
public void
afterTransactionBegin(Transaction tx)

Called when a Hibernate transaction is begun via the Hibernate Transaction API.

public void
afterTransactionCompletion(Transaction tx)

Called after a transaction is committed or rolled back.

public void
beforeTransactionCompletion(Transaction tx)

Called before a transaction is committed (but not before rollback).

public int[]

Returns:

array of dirty property indices or null to choose default behaviour
findDirty
(Object
a persistent entity
entity
,
Serializable id, Object[] currentState, Object[] previousState, String[] propertyNames, Type[] types)

Called from flush().

public Object

Returns:

a fully initialized entity
getEntity
(String
the name of the entity
entityName
,
Serializable
the instance identifier
id
)

Get a fully loaded entity instance that is cached externally

public String

Returns:

the name of the entity
getEntityName
(Object
an entity instance
object
)

Get the entity name for a persistent or transient instance

public Object

Returns:

an instance of the class, or null to choose default behaviour
instantiate
(String
the name of the entity
entityName
,
EntityMode
The type of entity instance to be returned.
entityMode
,
Serializable
the identifier of the new instance
id
)

Instantiate the entity class.

public Boolean

Returns:

Boolean or null to choose default behaviour
isTransient
(Object
a transient or detached entity
entity
)

Called to distinguish between transient and detached entities.

public void
onCollectionRecreate(Object collection, Serializable key)

Called before a collection is (re)created.

public void
onCollectionRemove(Object collection, Serializable key)

Called before a collection is deleted.

public void
onCollectionUpdate(Object collection, Serializable key)

Called before a collection is updated.

public void
onDelete(Object entity, Serializable id, Object[] state, String[] propertyNames, Type[] types)

Called before an object is deleted.

public boolean

Returns:

true if the user modified the currentState in any way.
onFlushDirty
(Object entity, Serializable id, Object[] currentState, Object[] previousState, String[] propertyNames, Type[] types)

Called when an object is detected to be dirty, during a flush.

public boolean

Returns:

true if the user modified the state in any way.
onLoad
(Object entity, Serializable id, Object[] state, String[] propertyNames, Type[] types)

Called just before an object is initialized.

public String

Returns:

original or modified sql
onPrepareStatement
(String
sql to be prepared
sql
)

Called when sql string is being prepared.

public boolean

Returns:

true if the user modified the state in any way.
onSave
(Object entity, Serializable id, Object[] state, String[] propertyNames, Type[] types)

Called before an object is saved.

public void
postFlush(Iterator<E> entities)

Called after a flush that actually ends in execution of the SQL statements required to synchronize in-memory state with the database.

public void
preFlush(Iterator<E> entities)

Called before a flush

Method Detail

afterTransactionBeginback to summary
public void afterTransactionBegin(Transaction tx)

Called when a Hibernate transaction is begun via the Hibernate Transaction API. Will not be called if transactions are being controlled via some other mechanism (CMT, for example).

afterTransactionCompletionback to summary
public void afterTransactionCompletion(Transaction tx)

Called after a transaction is committed or rolled back.

beforeTransactionCompletionback to summary
public void beforeTransactionCompletion(Transaction tx)

Called before a transaction is committed (but not before rollback).

findDirtyback to summary
public int[] findDirty(Object entity, Serializable id, Object[] currentState, Object[] previousState, String[] propertyNames, Type[] types)

Called from flush(). The return value determines whether the entity is updated

  • an array of property indices - the entity is dirty
  • an empty array - the entity is not dirty
  • null - use Hibernate's default dirty-checking algorithm
Parameters
entity:Object

a persistent entity

Returns:int[]

array of dirty property indices or null to choose default behaviour

getEntityback to summary
public Object getEntity(String entityName, Serializable id) throws CallbackException

Get a fully loaded entity instance that is cached externally

Parameters
entityName:String

the name of the entity

id:Serializable

the instance identifier

Returns:Object

a fully initialized entity

getEntityNameback to summary
public String getEntityName(Object object) throws CallbackException

Get the entity name for a persistent or transient instance

Parameters
object:Object

an entity instance

Returns:String

the name of the entity

instantiateback to summary
public Object instantiate(String entityName, EntityMode entityMode, Serializable id) throws CallbackException

Instantiate the entity class. Return null to indicate that Hibernate should use the default constructor of the class. The identifier property of the returned instance should be initialized with the given identifier.

Parameters
entityName:String

the name of the entity

entityMode:EntityMode

The type of entity instance to be returned.

id:Serializable

the identifier of the new instance

Returns:Object

an instance of the class, or null to choose default behaviour

isTransientback to summary
public Boolean isTransient(Object entity)

Called to distinguish between transient and detached entities. The return value determines the state of the entity with respect to the current session.

  • Boolean.TRUE - the entity is transient
  • Boolean.FALSE - the entity is detached
  • null - Hibernate uses the unsaved-value mapping and other heuristics to determine if the object is unsaved
Parameters
entity:Object

a transient or detached entity

Returns:Boolean

Boolean or null to choose default behaviour

onCollectionRecreateback to summary
public void onCollectionRecreate(Object collection, Serializable key) throws CallbackException

Called before a collection is (re)created.

onCollectionRemoveback to summary
public void onCollectionRemove(Object collection, Serializable key) throws CallbackException

Called before a collection is deleted.

onCollectionUpdateback to summary
public void onCollectionUpdate(Object collection, Serializable key) throws CallbackException

Called before a collection is updated.

onDeleteback to summary
public 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 state.

onFlushDirtyback to summary
public boolean onFlushDirty(Object entity, Serializable id, Object[] currentState, Object[] previousState, String[] propertyNames, Type[] types) throws CallbackException

Called when an object is detected to be dirty, during a flush. The interceptor may modify the detected currentState, 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 currentState will be propagated to the object, but not necessarily (immediately) to the database. It is strongly recommended that the interceptor not modify the previousState.

Returns:boolean

true if the user modified the currentState in any way.

onLoadback to summary
public boolean onLoad(Object entity, Serializable id, Object[] state, String[] propertyNames, Type[] types) throws CallbackException

Called just before an object is initialized. The interceptor may change the state, which will be propagated to the persistent object. Note that when this method is called, entity will be an empty uninitialized instance of the class.

Returns:boolean

true if the user modified the state in any way.

onPrepareStatementback to summary
public String onPrepareStatement(String sql)

Called when sql string is being prepared.

Parameters
sql:String

sql to be prepared

Returns:String

original or modified sql

onSaveback to summary
public boolean onSave(Object entity, Serializable id, Object[] state, String[] propertyNames, Type[] types) throws CallbackException

Called before an object is saved. The interceptor may modify the state, which will be used for the SQL INSERT and propagated to the persistent object.

Returns:boolean

true if the user modified the state in any way.

postFlushback to summary
public void postFlush(Iterator<E> entities) throws CallbackException

Called after a flush that actually ends in execution of the SQL statements required to synchronize in-memory state with the database.

preFlushback to summary
public void preFlush(Iterator<E> entities) throws CallbackException

Called before a flush