📄 entitypersister.java
字号:
//$Id: EntityPersister.java 11398 2007-04-10 14:54:07Z steve.ebersole@jboss.com $package org.hibernate.persister.entity;import java.io.Serializable;import java.util.Map;import org.hibernate.HibernateException;import org.hibernate.LockMode;import org.hibernate.MappingException;import org.hibernate.EntityMode;import org.hibernate.tuple.entity.EntityMetamodel;import org.hibernate.cache.CacheConcurrencyStrategy;import org.hibernate.cache.OptimisticCacheSource;import org.hibernate.cache.access.EntityRegionAccessStrategy;import org.hibernate.cache.entry.CacheEntryStructure;import org.hibernate.engine.CascadeStyle;import org.hibernate.engine.SessionFactoryImplementor;import org.hibernate.engine.SessionImplementor;import org.hibernate.engine.ValueInclusion;import org.hibernate.id.IdentifierGenerator;import org.hibernate.metadata.ClassMetadata;import org.hibernate.type.Type;import org.hibernate.type.VersionType;/** * Implementors define mapping and persistence logic for a particular * strategy of entity mapping. An instance of entity persisters corresponds * to a given mapped entity. * <p/> * Implementors must be threadsafe (preferrably immutable) and must provide a constructor * matching the signature of: {@link org.hibernate.mapping.PersistentClass}, {@link org.hibernate.engine.SessionFactoryImplementor} * * @author Gavin King */public interface EntityPersister extends OptimisticCacheSource { /** * The property name of the "special" identifier property in HQL */ public static final String ENTITY_ID = "id"; /** * Finish the initialization of this object. * <p/> * Called only once per {@link org.hibernate.SessionFactory} lifecycle, * after all entity persisters have been instantiated. * * @throws org.hibernate.MappingException Indicates an issue in the metdata. */ public void postInstantiate() throws MappingException; /** * Return the SessionFactory to which this persister "belongs". * * @return The owning SessionFactory. */ public SessionFactoryImplementor getFactory(); // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // stuff that is persister-centric and/or EntityInfo-centric ~~~~~~~~~~~~~~ // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /** * Returns an object that identifies the space in which identifiers of * this entity hierarchy are unique. Might be a table name, a JNDI URL, etc. * * @return The root entity name. */ public String getRootEntityName(); /** * The entity name which this persister maps. * * @return The name of the entity which this persister maps. */ public String getEntityName(); /** * Retrieve the underlying entity metamodel instance... * *@return The metamodel */ public EntityMetamodel getEntityMetamodel(); /** * Determine whether the given name represents a subclass entity * (or this entity itself) of the entity mapped by this persister. * * @param entityName The entity name to be checked. * @return True if the given entity name represents either the entity * mapped by this persister or one of its subclass entities; false * otherwise. */ public boolean isSubclassEntityName(String entityName); /** * Returns an array of objects that identify spaces in which properties of * this entity are persisted, for instances of this class only. * <p/> * For most implementations, this returns the complete set of table names * to which instances of the mapped entity are persisted (not accounting * for superclass entity mappings). * * @return The property spaces. */ public Serializable[] getPropertySpaces(); /** * Returns an array of objects that identify spaces in which properties of * this entity are persisted, for instances of this class and its subclasses. * <p/> * Much like {@link #getPropertySpaces()}, except that here we include subclass * entity spaces. * * @return The query spaces. */ public Serializable[] getQuerySpaces(); /** * Determine whether this entity supports dynamic proxies. * * @return True if the entity has dynamic proxy support; false otherwise. */ public boolean hasProxy(); /** * Determine whether this entity contains references to persistent collections. * * @return True if the entity does contain persistent collections; false otherwise. */ public boolean hasCollections(); /** * Determine whether any properties of this entity are considered mutable. * * @return True if any properties of the entity are mutable; false otherwise (meaning none are). */ public boolean hasMutableProperties(); /** * Determine whether this entity contains references to persistent collections * which are fetchable by subselect? * * @return True if the entity contains collections fetchable by subselect; false otherwise. */ public boolean hasSubselectLoadableCollections(); /** * Determine whether this entity has any non-none cascading. * * @return True if the entity has any properties with a cscade other than NONE; * false otherwise (aka, no cascading). */ public boolean hasCascades(); /** * Determine whether instances of this entity are considered mutable. * * @return True if the entity is considered mutable; false otherwise. */ public boolean isMutable(); /** * Determine whether the entity is inherited one or more other entities. * In other words, is this entity a subclass of other entities. * * @return True if other entities extend this entity; false otherwise. */ public boolean isInherited(); /** * Are identifiers of this entity assigned known before the insert execution? * Or, are they generated (in the database) by the insert execution. * * @return True if identifiers for this entity are generated by the insert * execution. */ public boolean isIdentifierAssignedByInsert(); /** * Get the type of a particular property by name. * * @param propertyName The name of the property for which to retrieve * the typpe. * @return The type. * @throws org.hibernate.MappingException Typically indicates an unknown * property name. */ public Type getPropertyType(String propertyName) throws MappingException; /** * Compare the two snapshots to determine if they represent dirty state. * * @param currentState The current snapshot * @param previousState The baseline snapshot * @param owner The entity containing the state * @param session The originating session * @return The indices of all dirty properties, or null if no properties * were dirty. */ public int[] findDirty(Object[] currentState, Object[] previousState, Object owner, SessionImplementor session); /** * Compare the two snapshots to determine if they represent modified state. * * @param old The baseline snapshot * @param current The current snapshot * @param object The entity containing the state * @param session The originating session * @return The indices of all modified properties, or null if no properties * were modified. */ public int[] findModified(Object[] old, Object[] current, Object object, SessionImplementor session); /** * Determine whether the entity has a particular property holding * the identifier value. * * @return True if the entity has a specific property holding identifier value. */ public boolean hasIdentifierProperty(); /** * Determine whether detahced instances of this entity carry their own * identifier value. * <p/> * The other option is the deperecated feature where users could supply * the id during session calls. * * @return True if either (1) {@link #hasIdentifierProperty()} or * (2) the identifier is an embedded composite identifier; false otherwise. */ public boolean canExtractIdOutOfEntity(); /** * Determine whether optimistic locking by column is enabled for this * entity. * * @return True if optimistic locking by column (i.e., <version/> or * <timestamp/>) is enabled; false otherwise. */ public boolean isVersioned(); /** * If {@link #isVersioned()}, then what is the type of the property * holding the locking value. * * @return The type of the version property; or null, if not versioned. */ public VersionType getVersionType(); /** * If {@link #isVersioned()}, then what is the index of the property * holding the locking value. * * @return The type of the version property; or -66, if not versioned. */ public int getVersionProperty(); /** * Determine whether this entity defines a natural identifier. * * @return True if the entity defines a natural id; false otherwise. */ public boolean hasNaturalIdentifier(); /** * If the entity defines a natural id ({@link #hasNaturalIdentifier()}), which * properties make up the natural id. * * @return The indices of the properties making of the natural id; or * null, if no natural id is defined. */ public int[] getNaturalIdentifierProperties(); /** * Retrieve the current state of the natural-id properties from the database. * * @param id The identifier of the entity for which to retrieve the naturak-id values. * @param session The session from which the request originated. * @return The natural-id snapshot. */ public Object[] getNaturalIdentifierSnapshot(Serializable id, SessionImplementor session); /** * Determine which identifier generation strategy is used for this entity. * * @return The identifier generation strategy. */ public IdentifierGenerator getIdentifierGenerator(); /** * Determine whether this entity defines any lazy properties (ala * bytecode instrumentation). * * @return True if the entity has properties mapped as lazy; false otherwise. */ public boolean hasLazyProperties(); /** * Load an instance of the persistent class. */ public Object load(Serializable id, Object optionalObject, LockMode lockMode, SessionImplementor session) throws HibernateException; /** * Do a version check (optional operation) */ public void lock(Serializable id, Object version, Object object, LockMode lockMode, SessionImplementor session) throws HibernateException; /** * Persist an instance */ public void insert(Serializable id, Object[] fields, Object object, SessionImplementor session) throws HibernateException; /** * Persist an instance, using a natively generated identifier (optional operation) */ public Serializable insert(Object[] fields, Object object, SessionImplementor session) throws HibernateException; /** * Delete a persistent instance */ public void delete(Serializable id, Object version, Object object, SessionImplementor session) throws HibernateException; /**
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -