与jboss捆绑在一起的liferay-6.1.2-ce-ga3中的Blob数据更新失败

时间:2015-01-13 12:58:54

标签: java jboss blob liferay-6 liferay-service-builder

我需要在liferay portlet项目中插入和更新blob数据。我正在使用liferay-6.1.2-ce-ga3进行开发。 我的service.xml有以下blob字段

 <column name="applicationData" type="Blob" db-name="application_data" />

在服务构建之后,我已经使用服务构建器生成的类成功插入了blob数据。

   myEntity.setApplicationData(blobdata);  
   myEntityLocalServiceUtil.addMyEntity(myEntity);

我尝试按如下方式更新blob数据

  myEntity.setCachedModel(false);    
  myEntity.setApplicationData(blobdata);
  myEntityLocalServiceUtil.updateMyEntity(myEntity,false);

但是除blob数据之外的所有内容都会更新。当我检查 BatchSessionImpl 源代码时,我注意到没有像 session.saveOrUpdate(model)这样的方法调用它的更新方法,通常会通过blob更新跳过 session.merge(模型)

以下是BatchSessionImpl类的更新方法

public void update(Session session, BaseModel<?> model, boolean merge)
    throws ORMException {

    if (merge || model.isCachedModel()) {
        session.merge(model);
    }
    else {
        if (model.isNew()) {
            session.save(model);

            model.setNew(false);
        }
        else {
            session.merge(model);
        }
    }

    if (!isEnabled()) {
        session.flush();

        return;
    }

    if ((PropsValues.HIBERNATE_JDBC_BATCH_SIZE == 0) ||
        ((_counter.get() % PropsValues.HIBERNATE_JDBC_BATCH_SIZE) == 0)) {

        session.flush();
    }

    _counter.set(_counter.get() + 1);
}

在我的情况下,调用else案例中的 session.merge(model)。 liferay-6.1.2-ce-ga3是否与jboss捆绑在一起,以便我们可以更新blob数据?有人可以建议我一些解决方法吗?

1 个答案:

答案 0 :(得分:0)

我已经通过创建一个ext插件解决了这个问题。我在更新方法的BatchSessionImpl类的ext-impl中进行了如下更改

public void update(Session session, BaseModel<?> model, boolean merge)
    throws ORMException {

    if (merge || model.isCachedModel()) {
        session.merge(model);
    }
    else {
        if (model.isNew()) {
            session.save(model);

            model.setNew(false);
        }
        else {
            session.saveOrUpdate(model);
        }
    }

    if (!isEnabled()) {
        session.flush();

        return;
    }

    if ((PropsValues.HIBERNATE_JDBC_BATCH_SIZE == 0) ||
        ((_counter.get() % PropsValues.HIBERNATE_JDBC_BATCH_SIZE) == 0)) {

        session.flush();
    }

    _counter.set(_counter.get() + 1);
}