📄 cacheentry.java
字号:
//$Id: CacheEntry.java,v 1.4 2005/03/16 04:45:19 oneovthafew Exp $package org.hibernate.cache.entry;import java.io.Serializable;import org.hibernate.AssertionFailure;import org.hibernate.HibernateException;import org.hibernate.Interceptor;import org.hibernate.engine.SessionImplementor;import org.hibernate.event.PreLoadEvent;import org.hibernate.persister.entity.EntityPersister;import org.hibernate.type.TypeFactory;import org.hibernate.util.ArrayHelper;/** * A cached instance of a persistent class * * @author Gavin King */public final class CacheEntry implements Serializable { private final Serializable[] disassembledState; private final String subclass; private final boolean lazyPropertiesAreUnfetched; public String getSubclass() { return subclass; } public boolean areLazyPropertiesUnfetched() { return lazyPropertiesAreUnfetched; } public CacheEntry(Object[] state, EntityPersister persister, boolean unfetched, SessionImplementor session, Object owner) throws HibernateException { //disassembled state gets put in a new array (we write to cache by value!) this.disassembledState = TypeFactory.disassemble( state, persister.getPropertyTypes(), session, owner ); subclass = persister.getEntityName(); lazyPropertiesAreUnfetched = unfetched; } CacheEntry(Serializable[] state, String subclass, boolean unfetched) { this.disassembledState = state; this.subclass = subclass; this.lazyPropertiesAreUnfetched = unfetched; } public Object[] assemble( final Object instance, final Serializable id, final EntityPersister persister, final Interceptor interceptor, final SessionImplementor session) throws HibernateException { if ( !persister.getEntityName().equals(subclass) ) { throw new AssertionFailure("Tried to assemble a different subclass instance"); } return assemble(disassembledState, instance, id, persister, interceptor, session); } private static Object[] assemble( final Serializable[] values, final Object result, final Serializable id, final EntityPersister persister, final Interceptor interceptor, final SessionImplementor session) throws HibernateException { //assembled state gets put in a new array (we read from cache by value!) Object[] assembledProps = TypeFactory.assemble( values, persister.getPropertyTypes(), session, result ); //persister.setIdentifier(result, id); //before calling interceptor, for consistency with normal load //TODO: reuse the PreLoadEvent PreLoadEvent preLoadEvent = new PreLoadEvent(session).setEntity(result) .setState(assembledProps).setId(id).setPersister(persister); session.getListeners().getPreLoadEventListener().onPreLoad(preLoadEvent); persister.setPropertyValues( result, assembledProps, session.getEntityMode() ); return assembledProps; } public Serializable[] getDisassembledState() { // todo: this was added to support initializing an entity's EntityEntry snapshot during reattach; // this should be refactored to instead expose a method to assemble a EntityEntry based on this // state for return. return disassembledState; } public String toString() { return "CacheEntry(" + subclass + ')' + ArrayHelper.toString(disassembledState); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -