2

重複の可能性:
休止状態:同じ識別子値を持つ別のオブジェクトがすでにセッションに関連付けられています

Hibernateに問題があります:

私は次のクラスを持っています:人

サーバー側のデータベースから特定のPerson.class"A"を読み込んでいます。次に、JSPページを介してこのオブジェクトをクライアントに提示します。

クライアントは「A」から「B」を操作し、フォームを介して送り返します。サーバー側のPerson.class"B"オブジェクトを新しい変数にロードしてから、それを保存しようとします。

しかし、アプリケーション全体がセッションベースであるため、単純に呼び出すことはできません。

HibernateTemplate.saveOrUpdate("B");

代わりに、保存する前に「B」と「A」をマージする必要があります。

しかし、私が電話するとき

HibernateTemplate.merge("B");

「B」オブジェクトは、「A」のすべてのプロパティを取得しますが、これはもう保存したくありません。「A」プロパティの一部をマージして取得せずに、「B」が「A」オブジェクトを完全に置き換えてほしい。

だから私の質問は:

Hibernateには、1つの特定のオブジェクトのプロパティと同じ識別子を持つセッション内のすべてのオブジェクトを上書きできる「上書き」または「置換」機能がありますか?

(この例では、フォームから返されたオブジェクト「B」)

また、Hibernateが次のことについて不平を言うのを防ぐ必要があります。

Exception in thread "main" org.hibernate.NonUniqueObjectException: a   
different object with the same identifier value was already associated
with the session:
4

1 に答える 1

1

最初にセッションからオブジェクトを削除してから、更新を使用して他のオブジェクトをセッションにアタッチできます。

私はあなたのサービスでこれを行います:

sessionFactory.getCurrentSession().evict(myObject);
sessionFactory.getCurrenctSession().update(myNewerObject);

トランザクションコントローラーメソッドが必要になるため、コントローラーでデータベース操作を行うべきではありません。

于 2012-07-25T13:19:13.137 に答える