| Method from org.hibernate.type.EntityType Detail: |
public int compare(Object x,
Object y,
EntityMode entityMode) {
return 0; //TODO: entities CAN be compared, by PK, fix this!
}
|
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 Object fromXMLNode(Node xml,
Mapping factory) throws HibernateException {
if ( !isEmbeddedInXML ) {
return getIdentifierType(factory).fromXMLNode(xml, factory);
}
else {
return xml;
}
}
|
public final String getAssociatedEntityName() {
return associatedEntityName;
}
|
public String getAssociatedEntityName(SessionFactoryImplementor factory) {
return getAssociatedEntityName();
}
|
public Joinable getAssociatedJoinable(SessionFactoryImplementor factory) throws MappingException {
return (Joinable) factory.getEntityPersister(associatedEntityName);
}
|
public int getHashCode(Object x,
EntityMode entityMode,
SessionFactoryImplementor factory) {
EntityPersister persister = factory.getEntityPersister(associatedEntityName);
if ( !persister.canExtractIdOutOfEntity() ) {
return super.getHashCode(x, entityMode);
}
final Serializable id;
if (x instanceof HibernateProxy) {
id = ( (HibernateProxy) x ).getHibernateLazyInitializer().getIdentifier();
}
else {
id = persister.getIdentifier(x, entityMode);
}
return persister.getIdentifierType().getHashCode(id, entityMode, factory);
}
|
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() );
}
}
|
public final String getIdentifierOrUniqueKeyPropertyName(Mapping factory) throws MappingException {
if ( isReferenceToPrimaryKey() ) {
return factory.getIdentifierPropertyName( getAssociatedEntityName() );
}
else {
return uniqueKeyPropertyName;
}
}
|
public final Type getIdentifierOrUniqueKeyType(Mapping factory) throws MappingException {
if ( isReferenceToPrimaryKey() ) {
return getIdentifierType(factory);
}
else {
return factory.getReferencedPropertyType( getAssociatedEntityName(), uniqueKeyPropertyName );
}
}
|
Type getIdentifierType(Mapping factory) {
return factory.getIdentifierType( getAssociatedEntityName() );
}
|
Type getIdentifierType(SessionImplementor session) throws MappingException {
return getIdentifierType( session.getFactory() );
}
|
public String getLHSPropertyName() {
return null;
}
|
public String getName() {
return associatedEntityName;
}
|
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 String getPropertyName() {
return null;
}
|
public String getRHSUniqueKeyPropertyName() {
return uniqueKeyPropertyName;
}
|
public final Class getReturnedClass() {
try {
return ReflectHelper.classForName(associatedEntityName);
}
catch (ClassNotFoundException cnfe) {
return java.util.Map.class;
}
}
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. |
public Type getSemiResolvedType(SessionFactoryImplementor factory) {
return factory.getEntityPersister(associatedEntityName).getIdentifierType();
}
|
public boolean isAssociationType() {
return true;
}
|
public boolean isEmbeddedInXML() {
return isEmbeddedInXML;
}
|
public final boolean isEntityType() {
return true;
}
|
public boolean isEqual(Object x,
Object y,
EntityMode entityMode,
SessionFactoryImplementor factory) {
EntityPersister persister = factory.getEntityPersister(associatedEntityName);
if ( !persister.canExtractIdOutOfEntity() ) {
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 isMutable() {
return false;
}
|
protected boolean isNotEmbedded(SessionImplementor session) {
return !isEmbeddedInXML && session.getEntityMode()==EntityMode.DOM4J;
}
|
protected boolean isNull(Object owner,
SessionImplementor session) {
return false;
}
|
abstract protected boolean isNullable()
|
abstract public boolean isOneToOne()
|
public boolean isReferenceToPrimaryKey() {
return uniqueKeyPropertyName==null;
}
Does this association foreign key reference the
primary key of the other table? |
public final boolean isSame(Object x,
Object y,
EntityMode entityMode) {
return x==y;
}
|
public boolean isXMLElement() {
return isEmbeddedInXML;
}
|
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(),
session.getFactory()
);
final PersistenceContext persistenceContext = session.getPersistenceContext();
Object result = persistenceContext.getEntity(euk);
//if ( result==null && !persistenceContext.isNonExistant(euk) ) {
if ( result==null ) {
result = persister.loadByUniqueKey(uniqueKeyPropertyName, key, session);
}
return result==null ? null : persistenceContext.proxyFor(result);
}
Load an instance by a unique key that is not the primary key. |
public Object nullSafeGet(ResultSet rs,
String name,
SessionImplementor session,
Object owner) throws HibernateException, SQLException {
return nullSafeGet( rs, new String[] {name}, session, owner );
}
|
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 Object replace(Object original,
Object target,
SessionImplementor session,
Object owner,
Map copyCache) throws HibernateException {
if (original==null) return null;
Object cached = copyCache.get(original);
if (cached!=null) {
return cached;
}
else {
if (original==target) return target;
//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 Object resolve(Object value,
SessionImplementor session,
Object owner) throws HibernateException {
if ( isNotEmbedded(session) ) {
return value;
}
if (value==null) {
return null;
}
else {
if ( isNull(owner, session) ) return null; //EARLY EXIT!
if ( isReferenceToPrimaryKey() ) {
return resolveIdentifier( (Serializable) value, session );
}
else {
return loadByUniqueKey(
getAssociatedEntityName(),
uniqueKeyPropertyName,
value,
session
);
}
}
}
Resolve an identifier or unique key value |
protected final Object resolveIdentifier(Serializable id,
SessionImplementor session) throws HibernateException {
boolean isProxyUnwrapEnabled = unwrapProxy &&
session.getFactory()
.getEntityPersister( getAssociatedEntityName() )
.isInstrumented( session.getEntityMode() );
Object proxyOrEntity = session.internalLoad(
getAssociatedEntityName(),
id,
eager,
isNullable() && !isProxyUnwrapEnabled
);
if (proxyOrEntity instanceof HibernateProxy) {
( (HibernateProxy) proxyOrEntity ).getHibernateLazyInitializer()
.setUnwrap(isProxyUnwrapEnabled);
}
return proxyOrEntity;
}
|
public void setToXMLNode(Node node,
Object value,
SessionFactoryImplementor factory) throws HibernateException {
if ( !isEmbeddedInXML ) {
getIdentifierType(factory).setToXMLNode(node, value, factory);
}
else {
Element elt = (Element) value;
replaceNode( node, new ElementWrapper(elt) );
}
}
|
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 toString() {
return getClass().getName() + '(" + getAssociatedEntityName() + ')";
}
|