Class AbstractLazyInitializer
- java.lang.Object
-
- org.hibernate.proxy.AbstractLazyInitializer
-
- All Implemented Interfaces:
LazyInitializer
- Direct Known Subclasses:
BasicLazyInitializer
,MapLazyInitializer
public abstract class AbstractLazyInitializer extends Object implements LazyInitializer
Convenience base class for lazy initialization handlers. Centralizes the basic plumbing of doing lazy initialization freeing subclasses to acts as essentially adapters to their intended entity mode and/or proxy generation strategy.
-
-
Constructor Summary
Constructors Modifier Constructor Description protected
AbstractLazyInitializer(String entityName, Object id, SharedSessionContractImplementor session)
Main constructor.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description String
getEntityName()
The entity-name of the entity our owning proxy represents.Object
getIdentifier()
Retrieve the identifier value for the entity our owning proxy represents, without initializing the proxy.Object
getImplementation()
Return the underlying persistent object, initializing if necessaryObject
getImplementation(SharedSessionContractImplementor s)
Return the underlying persistent object in the given session, or null if not contained in this session's persistence context.String
getImplementationEntityName()
Get the actual name of the entity, possibly initializing the entity if it has subclasses.Object
getInternalIdentifier()
Retrieve the identifier value for the entity our owning proxy represents.SharedSessionContractImplementor
getSession()
Get the session to which this proxy is associated, or null if it is not attached.protected String
getSessionFactoryName()
Get the session factory name.protected String
getSessionFactoryUuid()
Get the session factory UUID.protected Object
getTarget()
Getter for property 'target'.void
initialize()
Initialize the proxy, fetching the target entity if necessary.void
initializeWithoutLoadIfPossible()
Attempt to initialize the proxy without loading anything from the database.protected boolean
isAllowLoadOutsideTransaction()
Get whether the proxy can load data even if it's not attached to a session with an ongoing transaction.protected boolean
isConnectedToSession()
Getter for property 'connectedToSession'.boolean
isReadOnly()
Is the proxy read-only?Boolean
isReadOnlyBeforeAttachedToSession()
Get the read-only/modifiable setting that should be put in affect when it is attached to a session.boolean
isReadOnlySettingAvailable()
Is the proxy's read-only/modifiable setting available?boolean
isUninitialized()
Is the proxy uninitialized?boolean
isUnwrap()
protected void
permissiveInitialization()
protected void
prepareForPossibleLoadingOutsideTransaction()
Initialize internal state based on the currently attached session, in order to be ready to load data even after the proxy is detached from the session.void
setIdentifier(Object id)
Set the identifier value for the entity our owning proxy represents.void
setImplementation(Object target)
Initialize the proxy manually by injecting its target.void
setReadOnly(boolean readOnly)
Set an associated modifiable proxy to read-only mode, or a read-only proxy to modifiable mode.void
setSession(SharedSessionContractImplementor s)
Associate the proxy with the given session.void
setUnwrap(boolean unwrap)
void
unsetSession()
Unset this initializer's reference to session.-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface org.hibernate.proxy.LazyInitializer
getImplementationClass, getPersistentClass
-
-
-
-
Constructor Detail
-
AbstractLazyInitializer
protected AbstractLazyInitializer(String entityName, Object id, SharedSessionContractImplementor session)
Main constructor.- Parameters:
entityName
- The name of the entity being proxied.id
- The identifier of the entity being proxied.session
- The session owning the proxy.
-
-
Method Detail
-
getEntityName
public final String getEntityName()
Description copied from interface:LazyInitializer
The entity-name of the entity our owning proxy represents.- Specified by:
getEntityName
in interfaceLazyInitializer
- Returns:
- The entity-name.
-
getInternalIdentifier
public final Object getInternalIdentifier()
Description copied from interface:LazyInitializer
Retrieve the identifier value for the entity our owning proxy represents.- Specified by:
getInternalIdentifier
in interfaceLazyInitializer
- Returns:
- The identifier value.
-
getIdentifier
public final Object getIdentifier()
Description copied from interface:LazyInitializer
Retrieve the identifier value for the entity our owning proxy represents, without initializing the proxy.When JPA proxy compliance is enabled the proxy is initialized.
- Specified by:
getIdentifier
in interfaceLazyInitializer
- Returns:
- The identifier value.
-
setIdentifier
public final void setIdentifier(Object id)
Description copied from interface:LazyInitializer
Set the identifier value for the entity our owning proxy represents.- Specified by:
setIdentifier
in interfaceLazyInitializer
- Parameters:
id
- The identifier value.
-
isUninitialized
public final boolean isUninitialized()
Description copied from interface:LazyInitializer
Is the proxy uninitialized?- Specified by:
isUninitialized
in interfaceLazyInitializer
- Returns:
- True if uninitialized; false otherwise.
- See Also:
Hibernate.isInitialized(Object)
-
getSession
public final SharedSessionContractImplementor getSession()
Description copied from interface:LazyInitializer
Get the session to which this proxy is associated, or null if it is not attached.- Specified by:
getSession
in interfaceLazyInitializer
- Returns:
- The associated session.
-
setSession
public final void setSession(SharedSessionContractImplementor s) throws HibernateException
Description copied from interface:LazyInitializer
Associate the proxy with the given session.Care should be given to make certain that the proxy is added to the session's persistence context as well to maintain the symmetry of the association. That must be done separately as this method simply sets an internal reference. We do also check that if there is already an associated session that the proxy reference was removed from that previous session's persistence context.
- Specified by:
setSession
in interfaceLazyInitializer
- Parameters:
s
- The session- Throws:
HibernateException
- Indicates that the proxy was still contained in the persistence context of the "previous session".
-
unsetSession
public final void unsetSession()
Description copied from interface:LazyInitializer
Unset this initializer's reference to session. It is assumed that the caller is also taking care or cleaning up the owning proxy's reference in the persistence context.Generally speaking this is intended to be called only during
Session.evict(java.lang.Object)
andSession.clear()
processing; most other use-cases should callLazyInitializer.setSession(org.hibernate.engine.spi.SharedSessionContractImplementor)
instead.- Specified by:
unsetSession
in interfaceLazyInitializer
-
initialize
public final void initialize() throws HibernateException
Description copied from interface:LazyInitializer
Initialize the proxy, fetching the target entity if necessary.- Specified by:
initialize
in interfaceLazyInitializer
- Throws:
HibernateException
- Indicates a problem initializing the proxy.- See Also:
Hibernate.initialize(Object)
-
permissiveInitialization
protected void permissiveInitialization()
-
initializeWithoutLoadIfPossible
public final void initializeWithoutLoadIfPossible()
Attempt to initialize the proxy without loading anything from the database. This will only have any effect if the proxy is still attached to a session, and the entity being proxied has been loaded and added to the persistence context of that session since the proxy was created.
-
prepareForPossibleLoadingOutsideTransaction
protected void prepareForPossibleLoadingOutsideTransaction()
Initialize internal state based on the currently attached session, in order to be ready to load data even after the proxy is detached from the session.
-
isConnectedToSession
protected final boolean isConnectedToSession()
Getter for property 'connectedToSession'.- Returns:
- Value for property 'connectedToSession'.
-
getImplementation
public final Object getImplementation()
Description copied from interface:LazyInitializer
Return the underlying persistent object, initializing if necessary- Specified by:
getImplementation
in interfaceLazyInitializer
- Returns:
- The underlying target entity.
-
setImplementation
public final void setImplementation(Object target)
Description copied from interface:LazyInitializer
Initialize the proxy manually by injecting its target.- Specified by:
setImplementation
in interfaceLazyInitializer
- Parameters:
target
- The proxy target (the actual entity being proxied).
-
getImplementation
public final Object getImplementation(SharedSessionContractImplementor s) throws HibernateException
Description copied from interface:LazyInitializer
Return the underlying persistent object in the given session, or null if not contained in this session's persistence context.- Specified by:
getImplementation
in interfaceLazyInitializer
- Parameters:
s
- The session to check- Returns:
- The target, or null.
- Throws:
HibernateException
- Indicates problem locating the target.
-
getImplementationEntityName
public String getImplementationEntityName()
Description copied from interface:LazyInitializer
Get the actual name of the entity, possibly initializing the entity if it has subclasses.- Specified by:
getImplementationEntityName
in interfaceLazyInitializer
- Returns:
- The actual entity name.
-
getTarget
protected final Object getTarget()
Getter for property 'target'.Same as
getImplementation()
except that this method will not force initialization.- Returns:
- Value for property 'target'.
-
isReadOnlySettingAvailable
public final boolean isReadOnlySettingAvailable()
Description copied from interface:LazyInitializer
Is the proxy's read-only/modifiable setting available?- Specified by:
isReadOnlySettingAvailable
in interfaceLazyInitializer
- Returns:
- true, if the setting is available false, if the proxy is detached or its associated session is closed
-
isReadOnly
public final boolean isReadOnly()
Description copied from interface:LazyInitializer
Is the proxy read-only?The read-only/modifiable setting is not available when the proxy is detached or its associated session is closed.
To check if the read-only/modifiable setting is available:
- Specified by:
isReadOnly
in interfaceLazyInitializer
- Returns:
- true, if this proxy is read-only; false, otherwise
- See Also:
LazyInitializer.isReadOnlySettingAvailable()
,Session.isReadOnly(Object entityOrProxy)
-
setReadOnly
public final void setReadOnly(boolean readOnly)
Description copied from interface:LazyInitializer
Set an associated modifiable proxy to read-only mode, or a read-only proxy to modifiable mode. If the proxy is currently initialized, its implementation will be set to the same mode; otherwise, when the proxy is initialized, its implementation will have the same read-only/ modifiable setting as the proxy. In read-only mode, no snapshot is maintained and the instance is never dirty checked.If the associated proxy already has the specified read-only/modifiable setting, then this method does nothing.
- Specified by:
setReadOnly
in interfaceLazyInitializer
- Parameters:
readOnly
- if true, the associated proxy is made read-only; if false, the associated proxy is made modifiable.- See Also:
Session.setReadOnly(Object entityOrProxy, boolean readOnly)
-
isReadOnlyBeforeAttachedToSession
public final Boolean isReadOnlyBeforeAttachedToSession()
Get the read-only/modifiable setting that should be put in affect when it is attached to a session.This method should only be called during serialization when read-only/modifiable setting is not available (i.e., isReadOnlySettingAvailable() == false)
- Returns:
- null, if the default setting should be used; true, for read-only; false, for modifiable
- Throws:
IllegalStateException
- if isReadOnlySettingAvailable() == true
-
isAllowLoadOutsideTransaction
protected boolean isAllowLoadOutsideTransaction()
Get whether the proxy can load data even if it's not attached to a session with an ongoing transaction. This method should only be called during serialization, and only makes sense after a call toprepareForPossibleLoadingOutsideTransaction()
.- Returns:
true
if out-of-transaction loads are allowed,false
otherwise.
-
getSessionFactoryUuid
protected String getSessionFactoryUuid()
Get the session factory UUID. This method should only be called during serialization, and only makes sense after a call toprepareForPossibleLoadingOutsideTransaction()
.- Returns:
- the session factory UUID.
-
getSessionFactoryName
protected String getSessionFactoryName()
Get the session factory name. This method should only be called during serialization, and only makes sense after a call toprepareForPossibleLoadingOutsideTransaction()
.- Returns:
- the session factory name.
-
isUnwrap
public boolean isUnwrap()
- Specified by:
isUnwrap
in interfaceLazyInitializer
-
setUnwrap
public void setUnwrap(boolean unwrap)
- Specified by:
setUnwrap
in interfaceLazyInitializer
-
-