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

Java 与jboss捆绑的liferay-6.1.2-ce-ga3中的Blob数据更新失败,java,jboss,blob,liferay-6,liferay-service-builder,Java,Jboss,Blob,Liferay 6,Liferay Service Builder,我需要在liferay portlet项目中插入和更新blob数据。我正在使用liferay-6.1.2-ce-ga3进行开发。 My service.xml具有以下blob字段 <column name="applicationData" type="Blob" db-name="application_data" /> 我试图更新blob数据,如下所示 myEntity.setCachedModel(false); myEntity.setApplicatio

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

 <column name="applicationData" type="Blob" db-name="application_data" />
我试图更新blob数据,如下所示

  myEntity.setCachedModel(false);    
  myEntity.setApplicationData(blobdata);
  myEntityLocalServiceUtil.updateMyEntity(myEntity,false);
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);
}
但是除了blob数据之外的所有数据都在更新。当我检查BatchSessionImpl源代码时,我注意到没有类似于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);
}
公共无效更新(会话、基本模型、布尔合并)
异常{
if(merge | | model.isCachedModel()){
合并(模型);
}
否则{
if(model.isNew()){
session.save(模型);
model.setNew(false);
}
否则{
合并(模型);
}
}
如果(!isEnabled()){
session.flush();
返回;
}
if((PropsValues.HIBERNATE\u JDBC\u BATCH\u SIZE==0)||
((_counter.get()%PropsValues.HIBERNATE_JDBC_BATCH_SIZE)==0)){
session.flush();
}
_counter.set(_counter.get()+1);
}

在我的例子中,session.merge(model)在else的例子中被调用。与jboss捆绑在一起的liferay-6.1.2-ce-ga3有什么特别的东西可以更新blob数据吗?。有人能给我一些解决方法吗?

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

  myEntity.setCachedModel(false);    
  myEntity.setApplicationData(blobdata);
  myEntityLocalServiceUtil.updateMyEntity(myEntity,false);
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);
}
公共无效更新(会话、基本模型、布尔合并)
异常{
if(merge | | model.isCachedModel()){
合并(模型);
}
否则{
if(model.isNew()){
session.save(模型);
model.setNew(false);
}
否则{
session.saveOrUpdate(模型);
}
}
如果(!isEnabled()){
session.flush();
返回;
}
if((PropsValues.HIBERNATE\u JDBC\u BATCH\u SIZE==0)||
((_counter.get()%PropsValues.HIBERNATE_JDBC_BATCH_SIZE)==0)){
session.flush();
}
_counter.set(_counter.get()+1);
}