Java Hibernate:避免在合并期间持久化字段()
我有一个webapp,用户可以在其中上传文件(通过Java Hibernate:避免在合并期间持久化字段(),java,hibernate,blob,dozer,Java,Hibernate,Blob,Dozer,我有一个webapp,用户可以在其中上传文件(通过多部分/表单数据),并使用Hibernate(@实体类文档)将它们与元数据一起存储在数据库中 目标表有一个BLOB列content,其中保存了文件的内容。然后,上传文件的用户可以在基于GWT的UI中修改某些元数据(例如原始文件名)。为此,我使用将Document实例转换为ClientDocument实例,该实例没有content字段,可以为GWT序列化。一旦修改的ClientDocument实例从浏览器到达,我将其转换回Document并执行以下
多部分/表单数据
),并使用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()
期间更新此特定BLOBcontent
列?我看到了,但是@Transient
解决方案不适合我,因为我需要获取内容
BLOB,以便在后端执行其他操作
有什么建议吗?您可以告诉Hibernate根本不要更新该字段
<property name="fieldName" insert="true" update="false"/>
请注意,该字段是可插入的,这意味着它将被插入,但下次您要更新实体时,它将不会被更新。太棒了!这正是我需要的,因为这些blob应该是不可变的(另一个文档内容是表中的另一行)
@Column(insertable = true, updatable = false)