Package org.hibernate.type
Class EntityType
- java.lang.Object
-
- org.hibernate.type.AbstractType
-
- org.hibernate.type.EntityType
-
- All Implemented Interfaces:
Serializable,AssociationType,Type
- Direct Known Subclasses:
ManyToOneType,OneToOneType
public abstract class EntityType extends AbstractType implements AssociationType
Base for types which map associations to persistent entities.- See Also:
- Serialized Form
-
-
Field Summary
Fields Modifier and Type Field Description protected StringuniqueKeyPropertyName-
Fields inherited from class org.hibernate.type.AbstractType
LEGACY_DEFAULT_SIZE, LEGACY_DICTATED_SIZE
-
-
Constructor Summary
Constructors Modifier Constructor Description protectedEntityType(EntityType original, String superTypeEntityName)protectedEntityType(TypeFactory.TypeScope scope, String entityName, boolean referenceToPrimaryKey, String uniqueKeyPropertyName, boolean eager, boolean unwrapProxy)Constructs the requested entity type mapping.protectedEntityType(TypeFactory.TypeScope scope, String entityName, String uniqueKeyPropertyName, boolean eager, boolean unwrapProxy)Deprecated.
-
Method Summary
All Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description intcompare(Object x, Object y)Perform aComparatorstyle comparison between valuesObjectdeepCopy(Object value, SessionFactoryImplementor factory)Return a deep copy of the persistent state, stopping at entities and at collections.StringgetAssociatedEntityName()The name of the associated entity.StringgetAssociatedEntityName(SessionFactoryImplementor factory)The name of the associated entity.EntityPersistergetAssociatedEntityPersister(SessionFactoryImplementor factory)JoinablegetAssociatedJoinable(SessionFactoryImplementor factory)Retrieves theJoinabledefining the associated entity.intgetHashCode(Object x, SessionFactoryImplementor factory)Get a hash code, consistent with persistence "equality".protected ObjectgetIdentifier(Object value, SharedSessionContractImplementor session)StringgetIdentifierOrUniqueKeyPropertyName(Mapping factory)The name of the property on the associated entity to which our FK refersTypegetIdentifierOrUniqueKeyType(Mapping factory)Determine the type of either (1) the identifier if we reference the associated entity's PK or (2) the unique key to which we refer (i.e.StringgetLHSPropertyName()Get the name of a property in the owning entity that provides the join key (null if the identifier)StringgetName()For entity types, the name correlates to the associated entity name.abstract NotFoundActiongetNotFoundAction()StringgetOnCondition(String alias, SessionFactoryImplementor factory, Map enabledFilters)Get the "filtering" SQL fragment that is applied in the SQL on clause, in addition to the usual join conditionStringgetOnCondition(String alias, SessionFactoryImplementor factory, Map enabledFilters, Set<String> treatAsDeclarations)Get the "filtering" SQL fragment that is applied in the SQL on clause, in addition to the usual join conditionStringgetPropertyName()ClassgetReturnedClass()This returns the wrong class for an entity with a proxy, or for a named entity.StringgetRHSUniqueKeyPropertyName()The name of a unique property of the associated entity that provides the join key (null if the identifier of an entity, or key of a collection)TypegetSemiResolvedType(SessionFactoryImplementor factory)As part of 2-phase loading, when we perform resolving what is the resolved type for this type? Generally speaking the type and its semi-resolved type will be the same.booleanhasNotFoundAction()booleanisAssociationType()An entity type is a type of association typebooleanisEager(Boolean overridingEager)Would an entity be eagerly loaded given the value provided foroverridingEager?booleanisEntityType()Explicitly, an entity type is an entity type ;)booleanisEqual(Object x, Object y, SessionFactoryImplementor factory)Compare two instances of the class mapped by this type for persistence "equality" (equality of persistent state).booleanisLogicalOneToOne()Is the association modeled here a 1-1 according to the logical model?booleanisMutable()Are objects of this type mutable.protected booleanisNull(Object owner, SharedSessionContractImplementor session)abstract booleanisNullable()The nullability of the property.abstract booleanisOneToOne()Is the association modeled here defined as a 1-1 in the database (physical model)?booleanisReferenceToIdentifierProperty()booleanisReferenceToPrimaryKey()Does this association foreign key reference the primary key of the other table? Otherwise, it references a property-ref.booleanisSame(Object x, Object y)Two entities are considered the same when their instances are the same.ObjectloadByUniqueKey(String entityName, String uniqueKeyPropertyName, Object key, SharedSessionContractImplementor session)Load an instance by a unique key that is not the primary key.ObjectnullSafeGet(ResultSet rs, String[] names, SharedSessionContractImplementor session, Object owner)Extract a value of themapped classfrom the JDBC result set.ObjectnullSafeGet(ResultSet rs, String name, SharedSessionContractImplementor session, Object owner)Extract a value of themapped classfrom the JDBC result set.voidnullSafeSet(PreparedStatement st, Object value, int index, boolean[] settable, SharedSessionContractImplementor session)Bind a value represented by an instance of themapped classto the JDBC prepared statement, ignoring some columns as dictated by the 'settable' parameter.voidnullSafeSet(PreparedStatement st, Object value, int index, SharedSessionContractImplementor session)Bind a value represented by an instance of themapped classto the JDBC prepared statement.Objectreplace(Object original, Object target, SharedSessionContractImplementor session, Object owner, Map copyCache)During merge, replace the existing (target) value in the entity we are merging to with a new (original) value from the detached entity we are merging.protected TyperequireIdentifierOrUniqueKeyType(Mapping mapping)Objectresolve(Object value, SharedSessionContractImplementor session, Object owner)Resolve an identifier or unique key valueObjectresolve(Object value, SharedSessionContractImplementor session, Object owner, Boolean overridingEager)The second phase of 2-phase loading.protected ObjectresolveIdentifier(Serializable id, SharedSessionContractImplementor session)protected ObjectresolveIdentifier(Serializable id, SharedSessionContractImplementor session, Boolean overridingEager)Resolve an identifier via a load.protected TypeFactory.TypeScopescope()StringtoLoggableString(Object value, SessionFactoryImplementor factory)Generate a loggable representation of an instance of the value mapped by this type.StringtoString()Generates a string representation of this type.-
Methods inherited from class org.hibernate.type.AbstractType
assemble, beforeAssemble, disassemble, getHashCode, hydrate, isAnyType, isCollectionType, isComponentType, isDirty, isEqual, isModified, replace, semiResolve
-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
-
Methods inherited from interface org.hibernate.type.AssociationType
getForeignKeyDirection, isAlwaysDirtyChecked, useLHSPrimaryKey
-
Methods inherited from interface org.hibernate.type.Type
assemble, beforeAssemble, defaultSizes, dictatedSizes, disassemble, getColumnSpan, getHashCode, hydrate, isAnyType, isCollectionType, isComponentType, isDirty, isDirty, isEqual, isModified, replace, semiResolve, sqlTypes, toColumnNullness
-
-
-
-
Field Detail
-
uniqueKeyPropertyName
protected final String uniqueKeyPropertyName
-
-
Constructor Detail
-
EntityType
@Deprecated protected EntityType(TypeFactory.TypeScope scope, String entityName, String uniqueKeyPropertyName, boolean eager, boolean unwrapProxy)
Deprecated.Constructs the requested entity type mapping.- Parameters:
scope- The type scopeentityName- The name of the associated entity.uniqueKeyPropertyName- The property-ref name, or null if we reference the PK of the associated entity.eager- Is eager fetching enabled.unwrapProxy- Is unwrapping of proxies allowed for this association; unwrapping says to return the "implementation target" of lazy proxies; typically only possible with lazy="no-proxy".
-
EntityType
protected EntityType(TypeFactory.TypeScope scope, String entityName, boolean referenceToPrimaryKey, String uniqueKeyPropertyName, boolean eager, boolean unwrapProxy)
Constructs the requested entity type mapping.- Parameters:
scope- The type scopeentityName- The name of the associated entity.referenceToPrimaryKey- True if association references a primary key.uniqueKeyPropertyName- The property-ref name, or null if we reference the PK of the associated entity.eager- Is eager fetching enabled.unwrapProxy- Is unwrapping of proxies allowed for this association; unwrapping says to return the "implementation target" of lazy proxies; typically only possible with lazy="no-proxy".
-
EntityType
protected EntityType(EntityType original, String superTypeEntityName)
-
-
Method Detail
-
scope
protected TypeFactory.TypeScope scope()
-
isAssociationType
public boolean isAssociationType()
An entity type is a type of association type- Specified by:
isAssociationTypein interfaceType- Overrides:
isAssociationTypein classAbstractType- Returns:
- True.
-
isEntityType
public final boolean isEntityType()
Explicitly, an entity type is an entity type ;)- Specified by:
isEntityTypein interfaceType- Overrides:
isEntityTypein classAbstractType- Returns:
- True.
-
isMutable
public boolean isMutable()
Description copied from interface:TypeAre objects of this type mutable. (With respect to the referencing object ... entities and collections are considered immutable because they manage their own internal state.)
-
toString
public String toString()
Generates a string representation of this type.
-
getName
public String getName()
For entity types, the name correlates to the associated entity name.
-
isReferenceToPrimaryKey
public boolean isReferenceToPrimaryKey()
Does this association foreign key reference the primary key of the other table? Otherwise, it references a property-ref.- Returns:
- True if this association reference the PK of the associated entity.
-
getRHSUniqueKeyPropertyName
public String getRHSUniqueKeyPropertyName()
Description copied from interface:AssociationTypeThe name of a unique property of the associated entity that provides the join key (null if the identifier of an entity, or key of a collection)- Specified by:
getRHSUniqueKeyPropertyNamein interfaceAssociationType
-
getLHSPropertyName
public String getLHSPropertyName()
Description copied from interface:AssociationTypeGet the name of a property in the owning entity that provides the join key (null if the identifier)- Specified by:
getLHSPropertyNamein interfaceAssociationType
-
getPropertyName
public String getPropertyName()
-
getAssociatedEntityName
public final String getAssociatedEntityName()
The name of the associated entity.- Returns:
- The associated entity name.
-
getAssociatedEntityName
public String getAssociatedEntityName(SessionFactoryImplementor factory)
The name of the associated entity.- Specified by:
getAssociatedEntityNamein interfaceAssociationType- Parameters:
factory- The session factory, for resolution.- Returns:
- The associated entity name.
-
getAssociatedJoinable
public Joinable getAssociatedJoinable(SessionFactoryImplementor factory) throws MappingException
Retrieves theJoinabledefining the associated entity.- Specified by:
getAssociatedJoinablein interfaceAssociationType- Parameters:
factory- The session factory.- Returns:
- The associated joinable
- Throws:
MappingException- Generally indicates an invalid entity name.
-
getReturnedClass
public final Class getReturnedClass()
This returns the wrong class for an entity with a proxy, or for a named entity. Theoretically it should return the proxy class, but it doesn't. The problem here is that we do not necessarily have a ref to the associated entity persister (nor to the session factory, to look it up) which is really needed to "do the right thing" here...- Specified by:
getReturnedClassin interfaceType- Returns:
- The entity class.
-
nullSafeGet
public Object nullSafeGet(ResultSet rs, String name, SharedSessionContractImplementor session, Object owner) throws HibernateException, SQLException
Description copied from interface:TypeExtract a value of themapped classfrom the JDBC result set. Implementors should handle possibility of null values. This form might be called if the type is known to be a single-column type.- Specified by:
nullSafeGetin interfaceType- Parameters:
rs- The result set from which to extract value.name- the column name making up this type value (use to read from result set)session- The originating sessionowner- the parent entity- Returns:
- The extracted value
- Throws:
HibernateException- An error from HibernateSQLException- An error from the JDBC driver
-
nullSafeGet
public final Object nullSafeGet(ResultSet rs, String[] names, SharedSessionContractImplementor session, Object owner) throws HibernateException, SQLException
Description copied from interface:TypeExtract a value of themapped classfrom the JDBC result set. Implementors should handle possibility of null values.- Specified by:
nullSafeGetin interfaceType- Parameters:
rs- The result set from which to extract value.names- the column names making up this type value (use to read from result set)session- The originating sessionowner- the parent entity- Returns:
- The extracted value
- Throws:
HibernateException- An error from HibernateSQLException- An error from the JDBC driver- See Also:
alternative, 2-phase property initialization
-
nullSafeSet
public void nullSafeSet(PreparedStatement st, Object value, int index, boolean[] settable, SharedSessionContractImplementor session) throws SQLException
Description copied from interface:TypeBind a value represented by an instance of themapped classto the JDBC prepared statement, ignoring some columns as dictated by the 'settable' parameter. Implementors should handle the possibility of null values. A multi-column type should bind parameters starting from index.- Specified by:
nullSafeSetin interfaceType- Parameters:
st- The JDBC prepared statement to which to bindvalue- the object to writeindex- starting parameter bind indexsettable- an array indicating which columns to bind/ignoresession- The originating session- Throws:
SQLException- An error from the JDBC driver
-
nullSafeSet
public void nullSafeSet(PreparedStatement st, Object value, int index, SharedSessionContractImplementor session) throws SQLException
Description copied from interface:TypeBind a value represented by an instance of themapped classto the JDBC prepared statement. Implementors should handle possibility of null values. A multi-column type should bind parameters starting from index.- Specified by:
nullSafeSetin interfaceType- Parameters:
st- The JDBC prepared statement to which to bindvalue- the object to writeindex- starting parameter bind indexsession- The originating session- Throws:
SQLException- An error from the JDBC driver
-
isSame
public final boolean isSame(Object x, Object y)
Two entities are considered the same when their instances are the same.- Specified by:
isSamein interfaceType- Overrides:
isSamein classAbstractType- Parameters:
x- One entity instancey- Another entity instance- Returns:
- True if x == y; false otherwise.
-
compare
public int compare(Object x, Object y)
Description copied from interface:TypePerform aComparatorstyle comparison between values- Specified by:
comparein interfaceType- Overrides:
comparein classAbstractType- Parameters:
x- The first valuey- The second value- Returns:
- The comparison result. See
Comparator.compare(T, T)for a discussion.
-
deepCopy
public Object deepCopy(Object value, SessionFactoryImplementor factory)
Description copied from interface:TypeReturn a deep copy of the persistent state, stopping at entities and at collections.
-
replace
public Object replace(Object original, Object target, SharedSessionContractImplementor session, Object owner, Map copyCache) throws HibernateException
Description copied from interface:TypeDuring merge, replace the existing (target) value in the entity we are merging to with a new (original) value from the detached entity we are merging. For immutable objects, or null values, it is safe to simply return the first parameter. For mutable objects, it is safe to return a copy of the first parameter. For objects with component values, it might make sense to recursively replace component values.- Specified by:
replacein interfaceType- Parameters:
original- the value from the detached entity being mergedtarget- the value in the managed entitysession- The originating sessionowner- The owner of the valuecopyCache- The cache of already copied/replaced values- Returns:
- the value to be merged
- Throws:
HibernateException- An error from Hibernate
-
getHashCode
public int getHashCode(Object x, SessionFactoryImplementor factory)
Description copied from interface:TypeGet a hash code, consistent with persistence "equality". Again for most types the normal usage is to delegate to the value'shashCode.- Specified by:
getHashCodein interfaceType- Overrides:
getHashCodein classAbstractType- Parameters:
x- The value for which to retrieve a hash codefactory- The session factory- Returns:
- The hash code
-
isEqual
public boolean isEqual(Object x, Object y, SessionFactoryImplementor factory)
Description copied from interface:TypeCompare two instances of the class mapped by this type for persistence "equality" (equality of persistent state). This should always equate to some form of comparison of the value's internal state. As an example, for something like a date the comparison should be based on its internal "time" state based on the specific portion it is meant to represent (timestamp, date, time).- Specified by:
isEqualin interfaceType- Overrides:
isEqualin classAbstractType- Parameters:
x- The first valuey- The second valuefactory- The session factory- Returns:
- True if there are considered equal (see discussion above).
-
getOnCondition
public String getOnCondition(String alias, SessionFactoryImplementor factory, Map enabledFilters)
Description copied from interface:AssociationTypeGet the "filtering" SQL fragment that is applied in the SQL on clause, in addition to the usual join condition- Specified by:
getOnConditionin interfaceAssociationType
-
getOnCondition
public String getOnCondition(String alias, SessionFactoryImplementor factory, Map enabledFilters, Set<String> treatAsDeclarations)
Description copied from interface:AssociationTypeGet the "filtering" SQL fragment that is applied in the SQL on clause, in addition to the usual join condition- Specified by:
getOnConditionin interfaceAssociationType
-
resolve
public Object resolve(Object value, SharedSessionContractImplementor session, Object owner) throws HibernateException
Resolve an identifier or unique key value- Specified by:
resolvein interfaceType- Overrides:
resolvein classAbstractType- Throws:
HibernateException- See Also:
Type.resolve(Object, SharedSessionContractImplementor, Object, Boolean)
-
resolve
public Object resolve(Object value, SharedSessionContractImplementor session, Object owner, Boolean overridingEager) throws HibernateException
Description copied from interface:TypeThe second phase of 2-phase loading. Only really pertinent for entities and collections. Here we resolve the identifier to an entity or collection instance- Specified by:
resolvein interfaceType- Parameters:
value- an identifier or value returned by hydrate()session- the sessionowner- the parent entityoverridingEager- can override eager from the mapping. For example because ofLoadQueryInfluencersIf null, then it does not override. If true or false then it overrides the mapping value.- Returns:
- the given value, or the value associated with the identifier
- Throws:
HibernateException- An error from Hibernate- See Also:
Type.hydrate(java.sql.ResultSet, java.lang.String[], org.hibernate.engine.spi.SharedSessionContractImplementor, java.lang.Object)
-
isEager
public boolean isEager(Boolean overridingEager)
Would an entity be eagerly loaded given the value provided foroverridingEager?- Parameters:
overridingEager- can override eager from the mapping.- Returns:
- If
overridingEageris null, then it does not override. If true or false then it overrides the mapping value.
-
getSemiResolvedType
public Type getSemiResolvedType(SessionFactoryImplementor factory)
Description copied from interface:TypeAs part of 2-phase loading, when we perform resolving what is the resolved type for this type? Generally speaking the type and its semi-resolved type will be the same. The main deviation from this is in the case of an entity where the type would be the entity type and semi-resolved type would be its identifier type- Specified by:
getSemiResolvedTypein interfaceType- Overrides:
getSemiResolvedTypein classAbstractType- Parameters:
factory- The session factory- Returns:
- The semi-resolved type
-
getAssociatedEntityPersister
public EntityPersister getAssociatedEntityPersister(SessionFactoryImplementor factory)
-
getIdentifier
protected final Object getIdentifier(Object value, SharedSessionContractImplementor session) throws HibernateException
- Throws:
HibernateException
-
toLoggableString
public String toLoggableString(Object value, SessionFactoryImplementor factory)
Generate a loggable representation of an instance of the value mapped by this type.- Specified by:
toLoggableStringin interfaceType- Parameters:
value- The instance to be logged.factory- The session factory.- Returns:
- The loggable string.
- Throws:
HibernateException- Generally some form of resolution problem.
-
isOneToOne
public abstract boolean isOneToOne()
Is the association modeled here defined as a 1-1 in the database (physical model)?- Returns:
- True if a 1-1 in the database; false otherwise.
-
isLogicalOneToOne
public boolean isLogicalOneToOne()
Is the association modeled here a 1-1 according to the logical model?- Returns:
- True if a 1-1 in the logical model; false otherwise.
-
getIdentifierOrUniqueKeyType
public final Type getIdentifierOrUniqueKeyType(Mapping factory) throws MappingException
Determine the type of either (1) the identifier if we reference the associated entity's PK or (2) the unique key to which we refer (i.e. the property-ref).- Parameters:
factory- The mappings...- Returns:
- The appropriate type.
- Throws:
MappingException- Generally, if unable to resolve the associated entity name or unique key property name.
-
getIdentifierOrUniqueKeyPropertyName
public final String getIdentifierOrUniqueKeyPropertyName(Mapping factory) throws MappingException
The name of the property on the associated entity to which our FK refers- Parameters:
factory- The mappings...- Returns:
- The appropriate property name.
- Throws:
MappingException- Generally, if unable to resolve the associated entity name
-
isReferenceToIdentifierProperty
public boolean isReferenceToIdentifierProperty()
-
isNullable
public abstract boolean isNullable()
The nullability of the property.- Returns:
- The nullability of the property.
-
getNotFoundAction
public abstract NotFoundAction getNotFoundAction()
-
hasNotFoundAction
public boolean hasNotFoundAction()
-
resolveIdentifier
protected final Object resolveIdentifier(Serializable id, SharedSessionContractImplementor session, Boolean overridingEager) throws HibernateException
Resolve an identifier via a load.- Parameters:
id- The entity id to resolvesession- The originating session.- Returns:
- The resolved identifier (i.e., loaded entity).
- Throws:
HibernateException- Indicates problems performing the load.
-
resolveIdentifier
protected final Object resolveIdentifier(Serializable id, SharedSessionContractImplementor session) throws HibernateException
- Throws:
HibernateException
-
isNull
protected boolean isNull(Object owner, SharedSessionContractImplementor session)
-
loadByUniqueKey
public Object loadByUniqueKey(String entityName, String uniqueKeyPropertyName, Object key, SharedSessionContractImplementor session) throws HibernateException
Load an instance by a unique key that is not the primary key.- Parameters:
entityName- The name of the entity to loaduniqueKeyPropertyName- The name of the property defining the unique key.key- The unique key property value.session- The originating session.- Returns:
- The loaded entity
- Throws:
HibernateException- generally indicates problems performing the load.
-
-