0

ユーザーがファイルをアップロードできる webapp があり (を介してmultipart/form-data)、Hibernate を使用して DB にメタデータと共に保存されます ( @Entity class Document)。

contentターゲット テーブルには、ファイルの内容が保存されるBLOB 列があります。ファイルをアップロードするユーザーは、GWT ベースの UI で一部のメタデータ (元のファイル名など) を変更できます。そのために、Dozerを使用してインスタンスをインスタンスに変換しDocumentます。インスタンスにはフィールドClientDocumentがなく、GWT でシリアライズ可能です。content変更されたClientDocumentインスタンスがブラウザーから到着したら、それを元に変換してDocument実行します。

ClientDocument document = ...;
Document entity = dozerBeanMapper.map(document, Document.class);
Session session = sessionFactory.getCurrentSession();
session.merge(entity);

この時点で、Dozer は明らかに対応する BLOB データを入力していないため、entityの列はクリアされます。content

実行中にこの特定の BLOBcontent列を更新しないようにする方法はありますmerge()か? Not committing an hibernate entity field to the DB を見てきましたが、バックエンドで他の操作のために BLOBをフェッチする必要があるため、@Transient解決策はうまくいきません。content

助言がありますか?

4

1 に答える 1

0

フィールドをまったく更新しないようにHibernateに指示できます

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

注釈を使用すると、次のようになります。

@Column(insertable = true, updatable = false)

フィールドは挿入可能であり、挿入されることを意味しますが、次にエンティティを更新するときには更新されないことに注意してください。

于 2012-12-06T14:14:20.460 に答える