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

📄 entitytype.java

📁 介绍了hibernate的入门有一些基本常用的事例
💻 JAVA
字号:
//$Id: EntityType.java,v 1.42 2005/04/03 15:55:03 oneovthafew Exp $package org.hibernate.type;import java.io.Serializable;import java.sql.ResultSet;import java.sql.SQLException;import java.util.Map;import org.dom4j.Element;import org.dom4j.Node;import org.hibernate.AssertionFailure;import org.hibernate.HibernateException;import org.hibernate.MappingException;import org.hibernate.EntityMode;import org.hibernate.engine.EntityUniqueKey;import org.hibernate.engine.ForeignKeys;import org.hibernate.engine.Mapping;import org.hibernate.engine.PersistenceContext;import org.hibernate.engine.SessionFactoryImplementor;import org.hibernate.engine.SessionImplementor;import org.hibernate.persister.entity.EntityPersister;import org.hibernate.persister.entity.Joinable;import org.hibernate.persister.entity.UniqueKeyLoadable;import org.hibernate.proxy.HibernateProxy;import org.hibernate.proxy.LazyInitializer;import org.hibernate.util.ReflectHelper;/** * A reference to an entity class * @author Gavin King */public abstract class EntityType extends AbstractType implements AssociationType {	private final String associatedEntityName;	protected final String uniqueKeyPropertyName;	protected final boolean isEmbeddedInXML;		public final boolean isEntityType() {		return true;	}	public final String getAssociatedEntityName() {		return associatedEntityName;	}	public final boolean isSame(Object x, Object y, EntityMode entityMode) {		return x==y;	}		public int compare(Object x, Object y, EntityMode entityMode) {		return 0; //TODO: entities CAN be compared, by PK, fix this!	}	protected EntityType(String entityName, String uniqueKeyPropertyName, boolean isEmbeddedInXML) {		this.associatedEntityName = entityName;		this.uniqueKeyPropertyName = uniqueKeyPropertyName;		this.isEmbeddedInXML = isEmbeddedInXML;	}	public Object nullSafeGet(ResultSet rs, String name, SessionImplementor session, Object owner) 	throws HibernateException, SQLException {		return nullSafeGet( rs, new String[] {name}, session, owner );	}	/**	 * This returns the wrong class for an entity with a proxy. Theoretically	 * it should return the proxy class, but it doesn't.	 */	public final Class getReturnedClass() {		try {			return ReflectHelper.classForName(associatedEntityName);		}		catch (ClassNotFoundException cnfe) {			return java.util.Map.class;		}	}	/*protected final Object getActualIdentifier(Object value, SessionImplementor session) throws HibernateException {		return session.getEntityIdentifierIfNotUnsaved(value); //tolerates nulls	}*/	protected final Object getIdentifier(Object value, SessionImplementor session) 	throws HibernateException {		if ( isNotEmbedded(session) ) return value;				if ( isReferenceToPrimaryKey() ) {			return ForeignKeys.getEntityIdentifierIfNotUnsaved(associatedEntityName, value, session); //tolerates nulls		}		else if (value==null) {			return null;		}		else {			return session.getFactory()			        .getEntityPersister( getAssociatedEntityName() )			        .getPropertyValue( value, uniqueKeyPropertyName, session.getEntityMode() );		}	}	protected boolean isNotEmbedded(SessionImplementor session) {		return !isEmbeddedInXML && session.getEntityMode()==EntityMode.DOM4J;	}	/**	 * Get the identifier value of an instance or proxy	 */	private static Serializable getIdentifier(Object object, EntityPersister persister, EntityMode entityMode)	throws HibernateException {		if (object instanceof HibernateProxy) {			HibernateProxy proxy = (HibernateProxy) object;			LazyInitializer li = proxy.getHibernateLazyInitializer();			return li.getIdentifier();		}		else {			return persister.getIdentifier( object, entityMode );		}	}			public String toLoggableString(Object value, SessionFactoryImplementor factory) 	throws HibernateException {		if (value==null) return "null";				EntityPersister persister = factory.getEntityPersister(associatedEntityName);		StringBuffer result = new StringBuffer()			.append(associatedEntityName);				if ( persister.hasIdentifierProperty() ) {			//TODO: use of a guess here is bad...			final EntityMode entityMode = persister.guessEntityMode(value);			final Serializable id;			if (entityMode==null) {				if ( isEmbeddedInXML ) {					throw new ClassCastException( value.getClass().getName() );				}				id = (Serializable) value;			}			else {				id = getIdentifier( value, persister, entityMode );			}						result.append('#')				.append( persister.getIdentifierType().toLoggableString(id, factory) );		}				return result.toString();	}		/*public String toXMLString(Object value, SessionFactoryImplementor factory) throws HibernateException {		if (isEmbeddedInXML) throw new UnsupportedOperationException("entity references cannot be stringified");		if (factory==null) throw new AssertionFailure("null factory passed to toString");		return getIdentifierType(factory).toXMLString(value, factory);	}	public Object fromXMLString(String xml, Mapping factory) throws HibernateException {		if (isEmbeddedInXML) throw new UnsupportedOperationException("entity references cannot be stringified");		if (factory==null) throw new AssertionFailure("null factory passed to fromString");		return getIdentifierType(factory).fromXMLString(xml, factory);	}*/	public String getName() { return associatedEntityName; }	public Object deepCopy(Object value, EntityMode entityMode, SessionFactoryImplementor factory) {		return value; //special case ... this is the leaf of the containment graph, even though not immutable	}	public boolean isMutable() {		return false;	}	public abstract boolean isOneToOne();	public Object replace(Object original, Object target, SessionImplementor session, Object owner, Map copyCache)	throws HibernateException {		if (original==null) return null;		if (original==target) return target;		Object cached = copyCache.get(original);		if (cached!=null) {			return cached;		}		else {			//TODO: can this ever get called????			Object id = getIdentifier(original, session);			if (id==null) throw new AssertionFailure("cannot copy a reference to an object with a null id");			id = getIdentifierOrUniqueKeyType( session.getFactory() ).replace(id, null, session, owner, copyCache);			return resolve(id, session, owner);		}	}	public boolean isAssociationType() {		return true;	}	public final Object nullSafeGet(ResultSet rs, String[] names, SessionImplementor session, Object owner)	throws HibernateException, SQLException {		return resolve( hydrate(rs, names, session, owner), session, owner );	}	public boolean isDirty(Object old, Object current, SessionImplementor session) 	throws HibernateException {		if ( isSame( old, current, session.getEntityMode() ) ) return false;		Object oldid = getIdentifier(old, session);		Object newid = getIdentifier(current, session);		return !getIdentifierType(session).isSame( oldid, newid, session.getEntityMode() );	}	public Joinable getAssociatedJoinable(SessionFactoryImplementor factory) 	throws MappingException {		return (Joinable) factory.getEntityPersister(associatedEntityName);	}		Type getIdentifierType(Mapping factory) {		return factory.getIdentifierType( getAssociatedEntityName() );	}	Type getIdentifierType(SessionImplementor session) throws MappingException {		return getIdentifierType( session.getFactory() );	}	public final Type getIdentifierOrUniqueKeyType(Mapping factory) 	throws MappingException {		if ( isReferenceToPrimaryKey() ) {			return getIdentifierType(factory);		}		else {			return factory.getPropertyType( getAssociatedEntityName(), uniqueKeyPropertyName );		}	}	public final String getIdentifierOrUniqueKeyPropertyName(Mapping factory)	throws MappingException {		if ( isReferenceToPrimaryKey() ) {			return factory.getIdentifierPropertyName( getAssociatedEntityName() );		}		else {			return uniqueKeyPropertyName;		}	}		protected abstract boolean isNullable();	/**	 * Resolve an identifier	 */	protected final Object resolveIdentifier(Serializable id, SessionImplementor session) 	throws HibernateException {		return session.internalLoad( getAssociatedEntityName(), id, isNullable() ); 	}	/**	 * Resolve an identifier or unique key value	 */	public Object resolve(Object value, SessionImplementor session, Object owner)	throws HibernateException {				if ( isNotEmbedded(session) ) {			return value;		}		if (value==null) {			return null;		}		else {			if ( isReferenceToPrimaryKey() ) {				return resolveIdentifier( (Serializable) value, session );			}			else {				return loadByUniqueKey( getAssociatedEntityName(), uniqueKeyPropertyName, value, session );			}		}	}	public String getAssociatedEntityName(SessionFactoryImplementor factory) {		return getAssociatedEntityName();	}	/**	 * Does this association foreign key reference the	 * primary key of the other table?	 */	public boolean isReferenceToPrimaryKey() {		return uniqueKeyPropertyName==null;	}		public String getRHSUniqueKeyPropertyName() {		return uniqueKeyPropertyName;	}	public String toString() {		return getClass().getName() + '(' + getAssociatedEntityName() + ')';	}	/**	 * Load an instance by a unique key that is not the primary key.	 */	public Object loadByUniqueKey(			String entityName, 			String uniqueKeyPropertyName, 			Object key, 			SessionImplementor session)	throws HibernateException {				final SessionFactoryImplementor factory = session.getFactory();				UniqueKeyLoadable persister = (UniqueKeyLoadable) factory.getEntityPersister(entityName);					//TODO: implement caching?! proxies?!				EntityUniqueKey euk = new EntityUniqueKey(				entityName, 				uniqueKeyPropertyName, 				key, 				getIdentifierOrUniqueKeyType( factory ),				session.getEntityMode()		);				final PersistenceContext persistenceContext = session.getPersistenceContext();		Object result = persistenceContext.getEntity(euk);		if ( result==null && !persistenceContext.isNonExistant(euk) ) {			result = persister.loadByUniqueKey(uniqueKeyPropertyName, key, session);		}		return result==null ? null : persistenceContext.proxyFor(result);			}	public String getLHSPropertyName() {		return null;	}	public String getOnCondition(String alias, SessionFactoryImplementor factory, Map enabledFilters) 	throws MappingException {		if ( isReferenceToPrimaryKey() ) { //TODO: this is a bit arbitrary, expose a switch to the user?			return "";		}		else {			return getAssociatedJoinable(factory).filterFragment(alias, enabledFilters);		}	}		public int getHashCode(Object x, EntityMode entityMode, SessionFactoryImplementor factory) {		EntityPersister persister = factory.getEntityPersister(associatedEntityName);		if ( !persister.hasIdentifierPropertyOrEmbeddedCompositeIdentifier() ) {			return super.getHashCode(x, entityMode);		}				if (x instanceof HibernateProxy) {			return ( (HibernateProxy) x ).getHibernateLazyInitializer().getIdentifier().hashCode();		}				Serializable id = persister.getIdentifier(x, entityMode);		return persister.getIdentifierType().getHashCode(id, entityMode, factory);	}		public boolean isEqual(Object x, Object y, EntityMode entityMode, SessionFactoryImplementor factory) {		EntityPersister persister = factory.getEntityPersister(associatedEntityName);		if ( !persister.hasIdentifierPropertyOrEmbeddedCompositeIdentifier() ) {			return super.isEqual(x, y, entityMode);		}				Serializable xid;		if (x instanceof HibernateProxy) {			xid = ( (HibernateProxy) x ).getHibernateLazyInitializer().getIdentifier();		}		else {			xid = persister.getIdentifier(x, entityMode);		}				Serializable yid;		if (y instanceof HibernateProxy) {			yid = ( (HibernateProxy) y ).getHibernateLazyInitializer().getIdentifier();		}		else {			yid = persister.getIdentifier(y, entityMode);		}				return persister.getIdentifierType().isEqual(xid, yid, entityMode, factory);	}	public boolean isXMLElement() {		return isEmbeddedInXML;	}	public Object fromXMLNode(Node xml, Mapping factory) throws HibernateException {		if ( !isEmbeddedInXML ) {			return getIdentifierType(factory).fromXMLNode(xml, factory);		}		else {			return xml;		}	}	public void setToXMLNode(Node node, Object value, SessionFactoryImplementor factory) 	throws HibernateException {		if ( !isEmbeddedInXML ) {			getIdentifierType(factory).setToXMLNode(node, value, factory);		}		else {			replaceNode( node, (Element) value );		}	}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -