我有一个 web 应用程序,用户可以在其中上传文件(通过multipart/form-data
),并将它们与元数据一起存储在带有 Hibernate(@Entity class Document
)的数据库中。
目标表有一个 BLOB 列content
,其中保存了文件的内容。然后允许上传文件的用户在基于 GWT 的 UI 中修改一些元数据(例如原始文件名)。为此,我使用Dozer将Document
实例转换为一个ClientDocument
实例,该实例没有该content
字段并且可以为 GWT 序列化。一旦修改后的ClientDocument
实例从浏览器到达,我将其转换回Document
并执行:
ClientDocument document = ...;
Document entity = dozerBeanMapper.map(document, Document.class);
Session session = sessionFactory.getCurrentSession();
session.merge(entity);
此时entity
'content
列被清除,因为 Dozer 显然没有填写相应的 BLOB 数据。
有什么办法可以避免在 BLOBcontent
期间更新这个特定的 BLOB 列merge()
?我已经看到Not committing an hibernate entity field to the DB,但该@Transient
解决方案对我不起作用,因为我需要获取content
BLOB 以在后端进行其他操作。
有什么建议么?