Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/355.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 Hibernate:避免在合并期间持久化字段()_Java_Hibernate_Blob_Dozer - Fatal编程技术网

Java Hibernate:避免在合并期间持久化字段()

Java Hibernate:避免在合并期间持久化字段(),java,hibernate,blob,dozer,Java,Hibernate,Blob,Dozer,我有一个webapp,用户可以在其中上传文件(通过多部分/表单数据),并使用Hibernate(@实体类文档)将它们与元数据一起存储在数据库中 目标表有一个BLOB列content,其中保存了文件的内容。然后,上传文件的用户可以在基于GWT的UI中修改某些元数据(例如原始文件名)。为此,我使用将Document实例转换为ClientDocument实例,该实例没有content字段,可以为GWT序列化。一旦修改的ClientDocument实例从浏览器到达,我将其转换回Document并执行以下

我有一个webapp,用户可以在其中上传文件(通过
多部分/表单数据
),并使用Hibernate(
@实体类文档
)将它们与元数据一起存储在数据库中

目标表有一个BLOB列
content
,其中保存了文件的内容。然后,上传文件的用户可以在基于GWT的UI中修改某些元数据(例如原始文件名)。为此,我使用将
Document
实例转换为
ClientDocument
实例,该实例没有
content
字段,可以为GWT序列化。一旦修改的
ClientDocument
实例从浏览器到达,我将其转换回
Document
并执行以下操作:

ClientDocument document = ...;
Document entity = dozerBeanMapper.map(document, Document.class);
Session session = sessionFactory.getCurrentSession();
session.merge(entity);
此时,
实体
内容
列被清除,因为推土机显然没有填写相应的BLOB数据

有没有办法避免在
merge()
期间更新此特定BLOB
content
列?我看到了,但是
@Transient
解决方案不适合我,因为我需要获取
内容
BLOB,以便在后端执行其他操作


有什么建议吗?

您可以告诉Hibernate根本不要更新该字段

<property name="fieldName" insert="true" update="false"/>

请注意,该字段是可插入的,这意味着它将被插入,但下次您要更新实体时,它将不会被更新。

太棒了!这正是我需要的,因为这些blob应该是不可变的(另一个文档内容是表中的另一行)
@Column(insertable = true, updatable = false)