0
			SessionImplementor session, 
			Object owner) throws HibernateException { 
		 
		//TODO: currently broken for unique-key references (does not detect 
		//      change to unique key property of the associated object) 
		 
		Serializable id = assembleId( oid, session ); 
 
		if ( isNotEmbedded( session ) ) { 
			return id; 
		} 
		 
		if ( id == null ) { 
			return null; 
		} 
		else { 
			return resolveIdentifier( id, session ); 
		} 
	} 
 
	private Serializable assembleId(Serializable oid, SessionImplementor session) { 
		//the owner of the association is not the owner of the id 
		return ( Serializable ) getIdentifierType( session ).assemble( oid, session, null ); 
	} 
 
	public void beforeAssemble(Serializable oid, SessionImplementor session) { 
		scheduleBatchLoadIfNeeded( assembleId( oid, session ), session ); 
	} 
	 
	public boolean[] toColumnNullness(Object value, Mapping mapping) { 
		boolean[] result = new boolean[ getColumnSpan( mapping ) ]; 
		if ( value != null ) { 
			Arrays.fill( result, true ); 
		} 
		return result; 
	} 
	 
	public boolean isDirty( 
			Object old, 
			Object current, 
			SessionImplementor session) throws HibernateException { 
		if ( isSame( old, current ) ) { 
			return false; 
		} 
		Object oldid = getIdentifier( old, session ); 
		Object newid = getIdentifier( current, session ); 
		return getIdentifierType( session ).isDirty( oldid, newid, session ); 
	} 
 
	public boolean isDirty( 
			Object old, 
			Object current, 
			boolean[] checkable, 
			SessionImplementor session) throws HibernateException { 
		if ( isAlwaysDirtyChecked() ) { 
			return isDirty( old, current, session ); 
		} 
		else { 
			if ( isSame( old, current ) ) { 
				return false; 
			} 
			Object oldid = getIdentifier( old, session ); 
			Object newid = getIdentifier( current, session ); 
			return getIdentifierType( session ).isDirty( oldid, newid, checkable, session ); 
		} 
		 
	} 
 
}