簡體   English   中英

在與jboss捆綁在一起的liferay-6.1.2-ce-ga3中Blob數據更新失敗

[英]Blob data updation failed in liferay-6.1.2-ce-ga3 bundled with jboss

我需要在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源時,我注意到在它的update方法中沒有像session.saveOrUpdate(model)那樣的方法調用,該方法通常通過跳過session.merge(model)來進行 blob更新。

下面是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);
}

在我的情況下,在其他情況下的session.merge(model)被調用。 與jboss捆綁在一起的liferay-6.1.2-ce-ga3有什么特別的東西,以便我們可以更新blob數據嗎? 有人可以建議我一些解決方法嗎?

我已經通過創建ext插件解決了該問題。 我在ext-impl中更改了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.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);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM