protected Foo toUnwrappedModel(Foo foo) {
    if (foo instanceof FooImpl) {
      return foo;
    }

    FooImpl fooImpl = new FooImpl();

    fooImpl.setNew(foo.isNew());
    fooImpl.setPrimaryKey(foo.getPrimaryKey());

    fooImpl.setFooId(foo.getFooId());
    fooImpl.setGroupId(foo.getGroupId());
    fooImpl.setCompanyId(foo.getCompanyId());
    fooImpl.setUserId(foo.getUserId());
    fooImpl.setUserName(foo.getUserName());
    fooImpl.setCreateDate(foo.getCreateDate());
    fooImpl.setModifiedDate(foo.getModifiedDate());
    fooImpl.setField1(foo.getField1());
    fooImpl.setField2(foo.isField2());
    fooImpl.setField3(foo.getField3());
    fooImpl.setField4(foo.getField4());
    fooImpl.setField5(foo.getField5());

    return fooImpl;
  }
  /**
   * Caches the foo in the entity cache if it is enabled.
   *
   * @param foo the foo
   */
  @Override
  public void cacheResult(Foo foo) {
    EntityCacheUtil.putResult(
        FooModelImpl.ENTITY_CACHE_ENABLED, FooImpl.class, foo.getPrimaryKey(), foo);

    foo.resetOriginalValues();
  }
  /**
   * Clears the cache for the foo.
   *
   * <p>The {@link com.liferay.portal.kernel.dao.orm.EntityCache} and {@link
   * com.liferay.portal.kernel.dao.orm.FinderCache} are both cleared by this method.
   */
  @Override
  public void clearCache(Foo foo) {
    EntityCacheUtil.removeResult(
        FooModelImpl.ENTITY_CACHE_ENABLED, FooImpl.class, foo.getPrimaryKey());

    FinderCacheUtil.clearCache(FINDER_CLASS_NAME_LIST_WITH_PAGINATION);
    FinderCacheUtil.clearCache(FINDER_CLASS_NAME_LIST_WITHOUT_PAGINATION);
  }
  @Override
  public Foo updateImpl(com.liferay.testpacl.model.Foo foo) {
    foo = toUnwrappedModel(foo);

    boolean isNew = foo.isNew();

    FooModelImpl fooModelImpl = (FooModelImpl) foo;

    Session session = null;

    try {
      session = openSession();

      if (foo.isNew()) {
        session.save(foo);

        foo.setNew(false);
      } else {
        session.merge(foo);
      }
    } catch (Exception e) {
      throw processException(e);
    } finally {
      closeSession(session);
    }

    FinderCacheUtil.clearCache(FINDER_CLASS_NAME_LIST_WITH_PAGINATION);

    if (isNew || !FooModelImpl.COLUMN_BITMASK_ENABLED) {
      FinderCacheUtil.clearCache(FINDER_CLASS_NAME_LIST_WITHOUT_PAGINATION);
    } else {
      if ((fooModelImpl.getColumnBitmask()
              & FINDER_PATH_WITHOUT_PAGINATION_FIND_BY_FIELD2.getColumnBitmask())
          != 0) {
        Object[] args = new Object[] {fooModelImpl.getOriginalField2()};

        FinderCacheUtil.removeResult(FINDER_PATH_COUNT_BY_FIELD2, args);
        FinderCacheUtil.removeResult(FINDER_PATH_WITHOUT_PAGINATION_FIND_BY_FIELD2, args);

        args = new Object[] {fooModelImpl.getField2()};

        FinderCacheUtil.removeResult(FINDER_PATH_COUNT_BY_FIELD2, args);
        FinderCacheUtil.removeResult(FINDER_PATH_WITHOUT_PAGINATION_FIND_BY_FIELD2, args);
      }
    }

    EntityCacheUtil.putResult(
        FooModelImpl.ENTITY_CACHE_ENABLED, FooImpl.class, foo.getPrimaryKey(), foo, false);

    foo.resetOriginalValues();

    return foo;
  }
 /**
  * Caches the foos in the entity cache if it is enabled.
  *
  * @param foos the foos
  */
 @Override
 public void cacheResult(List<Foo> foos) {
   for (Foo foo : foos) {
     if (EntityCacheUtil.getResult(
             FooModelImpl.ENTITY_CACHE_ENABLED, FooImpl.class, foo.getPrimaryKey())
         == null) {
       cacheResult(foo);
     } else {
       foo.resetOriginalValues();
     }
   }
 }
  @Override
  public boolean equals(Object obj) {
    if (obj == null) {
      return false;
    }

    Foo foo = null;

    try {
      foo = (Foo) obj;
    } catch (ClassCastException cce) {
      return false;
    }

    long primaryKey = foo.getPrimaryKey();

    if (getPrimaryKey() == primaryKey) {
      return true;
    } else {
      return false;
    }
  }