0

我有一个 web 应用程序,用户可以在其中上传文件(通过multipart/form-data),并将它们与元数据一起存储在带有 Hibernate(@Entity class Document)的数据库中。

目标表有一个 BLOB 列content,其中保存了文件的内容。然后允许上传文件的用户在基于 GWT 的 UI 中修改一些元数据(例如原始文件名)。为此,我使用DozerDocument实例转换为一个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 以在后端进行其他操作。

有什么建议么?

4

1 回答 1

0

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

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

使用注释它将是这样的:

@Column(insertable = true, updatable = false)

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

于 2012-12-06T14:14:20.460 回答