📄 entitypersister.java
字号:
//$Id: EntityPersister.java 8751 2005-12-05 18:45:52Z steveebersole $
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.cache.CacheConcurrencyStrategy;
import org.hibernate.cache.entry.CacheEntryStructure;
import org.hibernate.engine.CascadeStyle;
import org.hibernate.engine.SessionFactoryImplementor;
import org.hibernate.engine.SessionImplementor;
import org.hibernate.id.IdentifierGenerator;
import org.hibernate.metadata.ClassMetadata;
import org.hibernate.type.Type;
import org.hibernate.type.VersionType;
/**
* Concrete <tt>EntityPersister</tt>s implement mapping and persistence logic for a particular persistent class.
* <br><br>
* Implementors must be threadsafe (preferrably immutable) and must provide a constructor
* of type
* <tt>(org.hibernate.map.PersistentClass, org.hibernate.impl.SessionFactoryImplementor)</tt>.
*
* @author Gavin King
*/
public interface EntityPersister {
/**
* The property name of the "special" identifier property in HQL
*/
public static final String ENTITY_ID = "id";
/**
* Finish the initialization of this object, once all <tt>ClassPersisters</tt> have been instantiated.
*
* Called only once, before any other method.
*/
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 class hierarchy are unique.
*
* A table name, a JNDI URL, etc.
*/
public String getRootEntityName();
/**
* The classname of the persistent class (used only for messages)
*/
public String getEntityName();
/**
* Is the given entity name the name of a subclass, or this class?
*/
public boolean isSubclassEntityName(String entityName);
/**
* Returns an array of objects that identify spaces in which properties of this class are persisted,
* for instances of this class only.
*/
public Serializable[] getPropertySpaces();
/**
* Returns an array of objects that identify spaces in which properties of this class are persisted,
* for instances of this class and its subclasses.
*/
public Serializable[] getQuerySpaces();
/**
* Does this class support dynamic proxies.
*/
public boolean hasProxy();
/**
* Do instances of this class contain collections.
*/
public boolean hasCollections();
/**
* Does this entity declare any properties of
* mutable type?
*/
public boolean hasMutableProperties();
/**
* Does this entity own any collections which are
* fetchable by subselect?
*/
public boolean hasSubselectLoadableCollections();
/**
* Does this class declare any cascading save/update/deletes.
*/
public boolean hasCascades();
/**
* Are instances of this class mutable.
*/
public boolean isMutable();
/**
* Is this class mapped as a subclass of another class?
*/
public boolean isInherited();
/**
* Is the identifier assigned before the insert by an <tt>IDGenerator</tt>. Or
* is it returned by the <tt>insert()</tt> method? This determines which form
* of <tt>insert()</tt> will be called.
*/
public boolean isIdentifierAssignedByInsert();
/**
* Get the type of a particular property
*/
public Type getPropertyType(String propertyName) throws MappingException;
/**
* Compare two snapshots of the state of an instance to determine if the persistent state
* was modified
* @return <tt>null</tt> or the indices of the dirty properties
*/
public int[] findDirty(Object[] x, Object[] y, Object owner, SessionImplementor session)
throws HibernateException;
/**
* Compare the state of an instance to the current database state
* @return <tt>null</tt> or the indices of the dirty properties
*/
public int[] findModified(Object[] old, Object[] current, Object object, SessionImplementor session)
throws HibernateException;
/**
* Does the class have a property holding the identifier value?
*/
public boolean hasIdentifierProperty();
/**
* Do detached instances of this class carry their own identifier value?
*/
public boolean hasIdentifierPropertyOrEmbeddedCompositeIdentifier();
/**
* Are instances of this class versioned by a timestamp or version number column.
*/
public boolean isVersioned();
/**
* Get the type of versioning (optional operation)
*/
public VersionType getVersionType();
/**
* Which property holds the version number (optional operation).
*/
public int getVersionProperty();
/**
* Does this entity declare a natural id?
*/
public boolean hasNaturalIdentifier();
/**
* Which properties hold the natural id?
*/
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) throws HibernateException;
/**
* Return the <tt>IdentifierGenerator</tt> for the class
*/
public IdentifierGenerator getIdentifierGenerator() throws HibernateException;
/**
* Does this entity define some lazy attributes?
*/
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;
/**
* Update a persistent instance
*/
public void update(
Serializable id,
Object[] fields,
int[] dirtyFields,
boolean hasDirtyCollection,
Object[] oldFields,
Object oldVersion,
Object object,
Object rowId,
SessionImplementor session
) throws HibernateException;
/**
* Get the Hibernate types of the class properties
*/
public Type[] getPropertyTypes();
/**
* Get the names of the class properties - doesn't have to be the names of the
* actual Java properties (used for XML generation only)
*/
public String[] getPropertyNames();
/**
* Get the "insertability" of the properties of this class
* (does the property appear in an SQL INSERT)
*/
public boolean[] getPropertyInsertability();
/**
* Which of the properties of this class are database generated values on insert?
*/
public boolean[] getPropertyInsertGeneration();
/**
* Which of the properties of this class are database generated values on update?
*/
public boolean[] getPropertyUpdateGeneration();
/**
* Get the "updateability" of the properties of this class
* (does the property appear in an SQL UPDATE)
*/
public boolean[] getPropertyUpdateability();
/**
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -