使用服务构建器类更新blob数据失败

时间:2014-05-07 10:48:40

标签: java liferay blob liferay-6

我正在使用liferay-6.1 CE。我正在开发一个项目,用于使用服务构建器将应用程序数据作为BLOB存储在DB中。 这是我在service.xml中的实体

<entity name="MyEntity" local-service="true" remote-service="false" table="MyEntity">

我在service.xml

中定义了我的blob数据
 <column name="myData" type="Blob"/>

我使用下面的代码将数据保存到数据库中。

long primarykey = CounterLocalServiceUtil.increment(com.mycompany.portal.model.MyEntity.class.getName())
MyEntity entityobj = MyEntityLocalServiceUtil.createMyEntity(primarykey);
byte[] bytes =String.valueOf(JAXBUtil.getInstance().marshal(appModelAttri, AppEntity.class)).getBytes();
//String.valueOf(JAXBUtil.getInstance().marshal(appModelAttri, AppEntity.class)).getBytes(); has the marshalled xml data of my application
Blob blobdata = new SerialBlob(bytes);
entityobj.setmyData(blobdata);
MyEntityLocalServiceUtil.addMyEntity(entityobj)

坚持使用数据库运行良好。但是当我尝试在数据库中更新同一条记录时,我的表中的每个其他字段都会更新。

下面给出了更新Blob数据的代码。

MyEntity entityobj = MyEntityLocalServiceUtil.getMyEntityByScreenName(PortalUtil.getUser(actionRequest).getScreenName());
byte[] bytes =String.valueOf(JAXBUtil.getInstance().marshal(appModelAttri, AppEntity.class)).getBytes();
Blob blobdata = new SerialBlob(bytes);
entityobj.setmyData(blobdata);
MyEntityLocalServiceUtil.updateMyEntity(entityobj);

我不明白为什么当我调用updateMyEntity方法时,只有Blob数据没有得到更新。 使用服务构建器生成的类有什么特定的Blob数据更新吗?。请帮助我。

1 个答案:

答案 0 :(得分:0)

我得到了blob更新失败的解决方案。要解决这个问题,你必须将 cachedmodel 设置为false,并使用2个参数(实体对象和合并)调用update方法。通过这样做,你强行让它执行session.saveOrUpdate语句并跳过 upSate upadate()方法中的session.merge(appModel)语句。

  

entityobj.setCachedModel(假);

     

MyEntityLocalServiceUtil.updateMyEntity(entityobj,FALSE);