我需要在 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)在 else 情况下被调用。与 jboss 捆绑在一起的 liferay-6.1.2-ce-ga3 是否有任何特定的东西,以便我们可以更新 blob 数据?有人可以建议我一些解决方法吗?