/**
   * Attach the passed in entity with the EntityManager retrieved from Seam.
   *
   * @param entity
   * @return The attached entity
   */
  @Override
  public Object fetchEntity(Object entity, String[] fetch) {
    EntityManager em = (EntityManager) Component.getInstance(emName);
    if (em == null)
      throw new RuntimeException("Could not find entity, EntityManager [" + emName + "] not found");

    Serializable id = (Serializable) Entity.forClass(entity.getClass()).getIdentifier(entity);
    if (id == null) return null;

    if (fetch == null || em.getDelegate().getClass().getName().indexOf(".hibernate.") < 0)
      return em.find(entity.getClass(), id);

    for (String f : fetch) {
      Query q =
          em.createQuery(
              "select e from "
                  + entity.getClass().getName()
                  + " e left join fetch e."
                  + f
                  + " where e = :entity");
      q.setParameter("entity", entity);
      entity = q.getSingleResult();
    }
    return entity;
  }
  /**
   * Attach the passed in entity with the EntityManager stored in the EntityHome object.
   *
   * @param entity
   * @return the attached hibernate object
   */
  @Override
  public Object fetchEntity(Object entity, String[] fetch) {
    PersistenceController<?> controller =
        (PersistenceController<?>) Component.getInstance(controllerName);
    EntityManager em = (EntityManager) controller.getPersistenceContext();
    Serializable id = (Serializable) Entity.forClass(entity.getClass()).getIdentifier(entity);
    if (id == null) return null;

    if (fetch == null || em.getDelegate().getClass().getName().indexOf(".hibernate.") < 0)
      return em.find(entity.getClass(), id);

    for (String f : fetch) {
      Query q =
          em.createQuery(
              "select e from "
                  + entity.getClass().getName()
                  + " e left join fetch e."
                  + f
                  + " where e = :entity");
      q.setParameter("entity", entity);
      entity = q.getSingleResult();
    }
    return entity;
  }