@Override
  protected ExpandoRow removeImpl(ExpandoRow expandoRow) throws SystemException {
    expandoRow = toUnwrappedModel(expandoRow);

    Session session = null;

    try {
      session = openSession();

      BatchSessionUtil.delete(session, expandoRow);
    } catch (Exception e) {
      throw processException(e);
    } finally {
      closeSession(session);
    }

    FinderCacheUtil.clearCache(FINDER_CLASS_NAME_LIST);

    ExpandoRowModelImpl expandoRowModelImpl = (ExpandoRowModelImpl) expandoRow;

    FinderCacheUtil.removeResult(
        FINDER_PATH_FETCH_BY_T_C,
        new Object[] {
          Long.valueOf(expandoRowModelImpl.getTableId()),
          Long.valueOf(expandoRowModelImpl.getClassPK())
        });

    EntityCacheUtil.removeResult(
        ExpandoRowModelImpl.ENTITY_CACHE_ENABLED, ExpandoRowImpl.class, expandoRow.getPrimaryKey());

    return expandoRow;
  }
  @Test
  public void testResetOriginalValues() throws Exception {
    if (!PropsValues.HIBERNATE_CACHE_USE_SECOND_LEVEL_CACHE) {
      return;
    }

    ExpandoRow newExpandoRow = addExpandoRow();

    _persistence.clearCache();

    ExpandoRowModelImpl existingExpandoRowModelImpl =
        (ExpandoRowModelImpl) _persistence.findByPrimaryKey(newExpandoRow.getPrimaryKey());

    Assert.assertEquals(
        existingExpandoRowModelImpl.getTableId(), existingExpandoRowModelImpl.getOriginalTableId());
    Assert.assertEquals(
        existingExpandoRowModelImpl.getClassPK(), existingExpandoRowModelImpl.getOriginalClassPK());
  }
  @Override
  public ExpandoRow updateImpl(
      com.liferay.portlet.expando.model.ExpandoRow expandoRow, boolean merge)
      throws SystemException {
    expandoRow = toUnwrappedModel(expandoRow);

    boolean isNew = expandoRow.isNew();

    ExpandoRowModelImpl expandoRowModelImpl = (ExpandoRowModelImpl) expandoRow;

    Session session = null;

    try {
      session = openSession();

      BatchSessionUtil.update(session, expandoRow, merge);

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

    FinderCacheUtil.clearCache(FINDER_CLASS_NAME_LIST);

    EntityCacheUtil.putResult(
        ExpandoRowModelImpl.ENTITY_CACHE_ENABLED,
        ExpandoRowImpl.class,
        expandoRow.getPrimaryKey(),
        expandoRow);

    if (!isNew
        && ((expandoRow.getTableId() != expandoRowModelImpl.getOriginalTableId())
            || (expandoRow.getClassPK() != expandoRowModelImpl.getOriginalClassPK()))) {
      FinderCacheUtil.removeResult(
          FINDER_PATH_FETCH_BY_T_C,
          new Object[] {
            Long.valueOf(expandoRowModelImpl.getOriginalTableId()),
            Long.valueOf(expandoRowModelImpl.getOriginalClassPK())
          });
    }

    if (isNew
        || ((expandoRow.getTableId() != expandoRowModelImpl.getOriginalTableId())
            || (expandoRow.getClassPK() != expandoRowModelImpl.getOriginalClassPK()))) {
      FinderCacheUtil.putResult(
          FINDER_PATH_FETCH_BY_T_C,
          new Object[] {
            Long.valueOf(expandoRow.getTableId()), Long.valueOf(expandoRow.getClassPK())
          },
          expandoRow);
    }

    return expandoRow;
  }