2015-01-13 46 views
0

我需要在liferay portlet項目中插入和更新blob數據。我正在使用liferay-6.1.2-ce-ga3進行開發。 我service.xml中有以下BLOB字段Blob數據更新在liferay-6.1.2-ce-ga3中與jboss捆綁失敗

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

服務構建之後我一直在使用服務構建器生成的類成功插入BLOB數據。

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

我試過如下

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

但除了BLOB數據一切都得到了更新,更新blob數據。當我檢查了BatchSessionImpl源,我注意到,有像session.saveOrUpdate(模型)在它的update方法調用通常通過跳過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); 
} 

在其他情況下,更新方法在我的情況session.merge(模型)是越來越調用。 liferay-6.1.2-ce-ga3與jboss捆綁在一起是否有特定的事情,以便我們可以更新blob數據?有人可以建議我一些解決方法。?

回答

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); 
}