Open Source Repository

Home /hibernate/hibernate-3.2.6.ga | Repository Home


org/hibernate/type/EmbeddedComponentType.java
//$Id: EmbeddedComponentType.java 10119 2006-07-14 00:09:19Z [email protected] $
package org.hibernate.type;

import java.lang.reflect.Method;

import org.hibernate.EntityMode;
import org.hibernate.HibernateException;
import org.hibernate.engine.SessionImplementor;
import org.hibernate.tuple.component.ComponentTuplizer;
import org.hibernate.tuple.component.ComponentMetamodel;

/**
 @author Gavin King
 */
public class EmbeddedComponentType extends ComponentType {

  public boolean isEmbedded() {
    return true;
  }

  public EmbeddedComponentType(ComponentMetamodel metamodel) {
    supermetamodel );
  }

  public boolean isMethodOf(Method method) {
    return ( ( ComponentTuplizer tuplizerMapping.getTuplizer(EntityMode.POJO) ).isMethodOf(method);
  }

  public Object instantiate(Object parent, SessionImplementor session)
  throws HibernateException {
    final boolean useParent = parent!=null &&
                              //TODO: Yuck! This is not quite good enough, it's a quick
                              //hack around the problem of having a to-one association
                              //that refers to an embedded component:
                              super.getReturnedClass().isInstance(parent);

    return useParent ? parent : super.instantiate(parent, session);
  }
}