0

私たちのWebサイトには、同じテーブルに対して機能する2つの操作があります。1つは複数の行の読み取りを実行し、もう1つは行を削除します。

Spring3.1とHibernate3.6を使用しています。

正確な操作は

EntityManager.createQuery().getResultList();

EntityManager.remove();

getResultList()スレッドではなく、remove()スレッドでStaleObjectStateExceptionが発生しています。問題は、なぜ読み取りによってStaleObjectExceptionが発生するのかということです。

4

2 に答える 2

0

Paceが言うように、インスタンスがアタッチされたまま、そのクエリで取得されたインスタンスを変更している可能性があります。これは、アタッチされたインスタンス内のpersistenceContext(EntityManagerの「インスタンス」)がトランザクションをコミットする前を意味します。

もう1つの可能性は、バージョンの属性の値を上書きしているため、entityManagerはインスタンス/エンティティを変更済みとしてマークするだけでなく、より低い/考慮されていないバージョン値で更新クエリを実行することです。

よろしく

于 2012-11-15T23:14:24.153 に答える
0

この問題の根本的な原因は、HibernateまたはSpringとはまったく関係がないことが判明しました。これは、問題のリンクがクリックされるたびに2つの別々のHTTPリクエストが送信される原因となったHTML/Javascriptの問題でした。(両方の要求は編集であったため、それが競合の原因でした。)

SpringとHibernateが機能することを人々が知っているように、この答えをここに出すだけです。

于 2012-11-17T19:08:13.180 に答える