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.
| Method from org.hibernate.proxy.AbstractLazyInitializer Detail: |
public final String getEntityName() {
return entityName;
}
|
public final Serializable getIdentifier() {
return id;
}
|
public final Object getImplementation() {
initialize();
return target;
}
Return the underlying persistent object, initializing if necessary |
public final Object getImplementation(SessionImplementor s) throws HibernateException {
final EntityKey entityKey = new EntityKey(
getIdentifier(),
s.getFactory().getEntityPersister( getEntityName() ),
s.getEntityMode()
);
return s.getPersistenceContext().getEntity( entityKey );
}
Return the underlying persistent object in the given Session, or null,
do not initialize the proxy |
public final SessionImplementor getSession() {
return session;
}
|
protected final Object getTarget() {
return target;
}
|
public final void initialize() throws HibernateException {
if (!initialized) {
if ( session==null ) {
throw new LazyInitializationException("could not initialize proxy - no Session");
}
else if ( !session.isOpen() ) {
throw new LazyInitializationException("could not initialize proxy - the owning Session was closed");
}
else if ( !session.isConnected() ) {
throw new LazyInitializationException("could not initialize proxy - the owning Session is disconnected");
}
else {
target = session.immediateLoad(entityName, id);
initialized = true;
checkTargetState();
}
}
else {
checkTargetState();
}
}
|
protected final boolean isConnectedToSession() {
return session!=null &&
session.isOpen() &&
session.getPersistenceContext().containsProxy(this);
}
|
public final boolean isUninitialized() {
return !initialized;
}
|
public boolean isUnwrap() {
return unwrap;
}
|
public final void setIdentifier(Serializable id) {
this.id = id;
}
|
public final void setImplementation(Object target) {
this.target = target;
initialized = true;
}
|
public final void setSession(SessionImplementor s) throws HibernateException {
if (s!=session) {
if ( isConnectedToSession() ) {
//TODO: perhaps this should be some other RuntimeException...
throw new HibernateException("illegally attempted to associate a proxy with two open Sessions");
}
else {
session = s;
}
}
}
|
public void setUnwrap(boolean unwrap) {
this.unwrap = unwrap;
}
|