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(TypeConfiguration typeConfiguration, String entityName, boolean referenceToPrimaryKey, String uniqueKeyPropertyName, boolean eager, boolean unwrapProxy)Constructs the requested entity type mapping.
-
Method Summary
All Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description intcompare(Object x, Object y)Perform aComparator-style comparison of the given values.ObjectdeepCopy(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, SessionFactoryImplementor sessionFactory)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.StringgetPropertyName()Class<?>getReturnedClass()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)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", that is, 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 with respect to the referencing object? Entities and collections are considered immutable because they manage their own internal state.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.voidnullSafeSet(PreparedStatement st, Object value, int index, boolean[] settable, SharedSessionContractImplementor session)Bind a value represented by an instance of themapped classto the given JDBCPreparedStatement, ignoring some columns as dictated by thesettableparameter.voidnullSafeSet(PreparedStatement st, Object value, int index, SharedSessionContractImplementor session)Bind a value represented by an instance of themapped classto the given JDBCPreparedStatement, ignoring some columns as dictated by thesettableparameter.Objectreplace(Object original, Object target, SharedSessionContractImplementor session, Object owner, Map<Object,Object> 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)protected Objectresolve(Object value, SharedSessionContractImplementor session, Object owner)Resolve an identifier or unique key valueprotected ObjectresolveIdentifier(Object id, SharedSessionContractImplementor session)protected ObjectresolveIdentifier(Object id, SharedSessionContractImplementor session, Boolean overridingEager)Resolve an identifier via a load.protected TypeConfigurationscope()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, disassemble, getHashCode, isAnyType, isCollectionType, isComponentType, isDirty, isEqual, isModified, replace
-
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, disassemble, disassemble, getColumnSpan, getHashCode, getSqlTypeCodes, isAnyType, isCollectionType, isComponentType, isDirty, isDirty, isEqual, isModified, replace, toColumnNullness
-
-
-
-
Field Detail
-
uniqueKeyPropertyName
protected final String uniqueKeyPropertyName
-
-
Constructor Detail
-
EntityType
protected EntityType(TypeConfiguration typeConfiguration, String entityName, boolean referenceToPrimaryKey, String uniqueKeyPropertyName, boolean eager, boolean unwrapProxy)
Constructs the requested entity type mapping.
-
EntityType
protected EntityType(EntityType original, String superTypeEntityName)
-
-
Method Detail
-
scope
protected TypeConfiguration 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.
-
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 given JDBCPreparedStatement, ignoring some columns as dictated by thesettableparameter. Implementors should handle the possibility of null values. A multi-column type should bind parameters starting fromindex.- 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 given JDBCPreparedStatement, ignoring some columns as dictated by thesettableparameter. Implementors should handle the possibility of null values. A multi-column type should bind parameters starting fromindex.- 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 aComparator-style comparison of the given values.- Specified by:
comparein interfaceType- Overrides:
comparein classAbstractType- Parameters:
x- The first valuey- The second value- Returns:
- The comparison result.
- See Also:
Comparator.compare(Object, Object)
-
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<Object,Object> 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". For most types this could simply delegate toType.getHashCode(Object).- 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", that is, equality of persistent state. For most types this could simply delegate toType.isEqual(Object, Object).This should always equate to some form of comparison of the value's internal state. As an example, for Java's
Dateclass, the comparison should be of its internal state, but based only on the specific part which is persistent (the timestamp, date, or 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).
-
resolve
protected Object resolve(Object value, SharedSessionContractImplementor session, Object owner)
Resolve an identifier or unique key value
-
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.
-
getAssociatedEntityPersister
public EntityPersister getAssociatedEntityPersister(SessionFactoryImplementor factory)
-
getIdentifier
protected final Object getIdentifier(Object value, SharedSessionContractImplementor session) throws HibernateException
- Throws:
HibernateException
-
getIdentifier
protected final Object getIdentifier(Object value, SessionFactoryImplementor sessionFactory) 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.
-
resolveIdentifier
protected final Object resolveIdentifier(Object 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(Object 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.
-
-