⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cacheentry.java

📁 一个Java持久层类库
💻 JAVA
字号:
//$Id: CacheEntry.java 7785 2005-08-08 23:24:44Z oneovthafew $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.EventSource;import org.hibernate.event.PreLoadEvent;import org.hibernate.event.PreLoadEventListener;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;	private final Object version;		public String getSubclass() {		return subclass;	}		public boolean areLazyPropertiesUnfetched() {		return lazyPropertiesAreUnfetched;	}		public CacheEntry(			final Object[] state, 			final EntityPersister persister, 			final boolean unfetched, 			final Object version,			final SessionImplementor session, 			final 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(), 				persister.isLazyPropertiesCacheable() ? 					null : persister.getPropertyLaziness(),				session, 				owner 			);		subclass = persister.getEntityName();		lazyPropertiesAreUnfetched = unfetched || !persister.isLazyPropertiesCacheable();		this.version = version;	}		public Object getVersion() {		return version;	}	CacheEntry(Serializable[] state, String subclass, boolean unfetched, Object version) {		this.disassembledState = state;		this.subclass = subclass;		this.lazyPropertiesAreUnfetched = unfetched;		this.version = version;	}	public Object[] assemble(			final Object instance, 			final Serializable id, 			final EntityPersister persister, 			final Interceptor interceptor, 			final EventSource 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 EventSource 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);				PreLoadEventListener[] listeners = session.getListeners().getPreLoadEventListeners();		for ( int i = 0; i < listeners.length; i++ ) {			listeners[i].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 + -