Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用service builder类更新blob数据失败_Java_Liferay_Blob_Liferay 6 - Fatal编程技术网

Java 使用service builder类更新blob数据失败

Java 使用service builder类更新blob数据失败,java,liferay,blob,liferay-6,Java,Liferay,Blob,Liferay 6,我正在使用liferay-6.1 CE。我正在开发一个项目,使用ServiceBuilder将应用程序数据存储为数据库中的BLOB。 这是我在service.xml中的实体 <entity name="MyEntity" local-service="true" remote-service="false" table="MyEntity"> <column name="myData" type="Blob"/> 持久化到db效果很好。但是当我尝试更新db中的同一记

我正在使用liferay-6.1 CE。我正在开发一个项目,使用ServiceBuilder将应用程序数据存储为数据库中的BLOB。 这是我在service.xml中的实体

<entity name="MyEntity" local-service="true" remote-service="false" table="MyEntity">
 <column name="myData" type="Blob"/>
持久化到db效果很好。但是当我尝试更新db中的同一记录时,表中除blob数据字段外的其他字段都会更新

下面给出了更新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数据没有得到更新。
使用service builder生成的类更新Blob数据有什么特别的地方吗?请帮助我。

我找到了Blob更新失败的解决方案。要解决此问题,必须将cachedmodel设置为false,并使用两个参数(实体对象和合并)调用update方法。这样做可以强制使其执行session.saveOrUpdate语句,并跳过upadate()中的session.merge(appModel)语句批处理会话mpl的方法

entityobj.setCachedModel(false)

MyEntityLocalServiceUtil.updateMyEntity(entityobj,false)

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