我有一个 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解决方案对我不起作用,因为我需要获取contentBLOB 以在后端进行其他操作。
有什么建议么?