Hibernate 4.1.7.Final を使用しており、session.merge(entity)
メソッドを使用してオブジェクトを更新しようとしています。エンティティには次の注釈が付けられます。
@SelectBeforeUpdate(true)
と@DynamicUpdate(true)
ただし、merge メソッドが元の非 null フィールド (以前に永続化されたエンティティ内) を、マージされるエンティティからの null 値で上書きすることがわかりました。これは望ましくありません。@DynamicUpdate
null以外の値のみを更新すると思いました。
Hibernate ドキュメントのマージ メソッドの説明は次のとおりです。
指定されたオブジェクトの状態を、同じ識別子を持つ永続オブジェクトにコピーします。セッションに現在関連付けられている永続インスタンスがない場合は、ロードされます。永続インスタンスを返します。指定されたインスタンスが保存されていない場合は、のコピーを保存し、それを新しい永続インスタンスとして返します。指定されたインスタンスはセッションに関連付けられません。関連付けが cascade="merge" でマップされている場合、この操作は関連付けられたインスタンスにカスケードします。
何が問題なのですか?
ありがとう。