3

要素を追加してキャンセルしている間、休止状態にするのは初めてですが、データがdbに保存されていることがわかります。コードのどこにも、save メソッドを呼び出して保存していません。

4

3 に答える 3

2

Hibernate セッションに既に関連付けられているオブジェクトを変更している場合、すべての変更が保存されます。マニュアルを確認してください。

たとえば、次のようなことをするとします。

  1. DB からオブジェクトをロードする
  2. 値を追加または削除してオブジェクトを変更します
  3. メソッドを使用しなくても、変更は保存されますsave()
于 2013-01-02T10:35:25.913 に答える
0

休止状態の構成にAutoFlashand/orAutoCommitパラメータがあるようです。Onそれらを無効にしてみてください。

于 2013-01-02T10:24:03.527 に答える
0

データベースからデータをロードすると、データは永続的になり、セッションが閉じられる前にデータが更新されると、データに加えられた変更が更新されます。ロード後に行った変更でデータベース内のデータを更新したくない場合は、セッションを閉じた後にのみ変更を行います。その後、データを再度永続化する場合は、もう 1 つのセッションを開いて、save() または persist() を呼び出します。

EDIT:1)異なるセッション間でキャッシュがないように、キャッシュが無効になっていることを確認してください。

<property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>

2) 次の手順に従います。

i) セッションを開始 --> トランザクションを開始 --> 両方のテーブルからデータを取得 --> トランザクションを閉じる --> セッションを閉じる。

ii)3番目のテーブルのオブジェクトを作成します->最初の2つのテーブルからデータを追加するなど、好きなことをします。

iii) 新しいセッションを開始 --> 新しいトランザクションを開始 --> session.save() を使用して 3 番目のテーブルのオブジェクトを保存 --> トランザクションを閉じる --> セッションを閉じる。

手順 (i) が完了すると、table1 と table2 のオブジェクトは「永続的」ではなくなり、「分離」されます。手順 (iii) で session.save() を実行しない場合、table3 のオブジェクトは保存されません。これは、永続オブジェクトを扱っていないためです。

これは、永続オブジェクトと切り離されたオブジェクトについての私の理解によるものです。うまくいかない場合は、返信してください。私はそれをコード化して解決策を見つけます。

もう 1 つのアドバイスとして、session.save() の代わりに session.persist() の使用を検討してください。それらの違いを理解したい場合は、次のリンクを参照してください: Hibernate での persist() と save() の利点は何ですか?

幸運を!

于 2013-01-02T19:37:49.567 に答える