liferay ポートレット プロジェクトで 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);
次のようにブロブデータを更新しようとしました
myEntity.setCachedModel(false);
myEntity.setApplicationData(blobdata);
myEntityLocalServiceUtil.updateMyEntity(myEntity,false);
しかし、ブロブ データ以外はすべて更新されています。BatchSessionImplソースを確認したところ、通常はsession.merge(model)をスキップして blob 更新を行う update メソッドにsession.saveOrUpdate(model)呼び出しのようなメソッドがないことに気付きました。
以下は BatchSessionImpl クラスの update メソッドです
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)が呼び出されています。blob データを更新できるように、jboss にバンドルされている liferay-6.1.2-ce-ga3 に固有のものはありますか? 誰かが私にいくつかの回避策を提案できますか?