0

テーブルを持つアプリケーションがあり、テーブル内のアイテムをクリックすると、テキストフィールドのグループにそのデータ (FieldGroup) が入力され、変更を保存するオプションがあります。ユーザーが私のpostgresデータベースに加えた変更。このアプリケーションには vaadin と hibernate を使用しています。これまで私はやろうとしました

   editorField.commit() // after the user clicks the save button

私が試してみました

   editorField.commit() 
   hbsession.persist(editorField) //hbsession is the name of my Session

そして私も試しました

   editorField.commit();
   hbsession.save(editorField);

最後の2つは私に次のエラーを与えます

Caused by: org.hibernate.SessionException: Session is closed!
4

2 に答える 2

4

まず最初に、Vaadin が従来のリクエスト/レスポンス Web フレームワークとは異なることを理解する必要があります。実際、Vaadin は *イベント駆動型*のフレームワークであり、Swing と非常によく似ています。ユーザーの最初のクリックからアプリケーション コンテキストを構築し、Web サイト全体の訪問中にそれを保持します。問題は、休止状態セッションを開始できるエントリ要求ポイントがなく、閉じる応答ポイントがないことです。ボタンを 1 回クリックするだけで大​​量のリクエストが発生します。

したがって、entitymanager-per-requestパターンはまったく役に立ちません。接続プールを低く保つために、hibernate.connection_release after_transaction で1 つのスタンドアロン em またはem-per-sessionパターンを使用することをお勧めします。

JPAContianer にとっては、コンテナーを更新する必要があるか、リレーションで Bean を処理する必要がある限り、使用できません。また、バッチロードで動作させることができなかったので、エントリまたはリレーションのすべての読み取りは、DB への 1 つの選択に相当します。遅延読み込みをサポートしません。

必要なのは、EM/セッションを開くことだけです。提案されたパターンを使用するか、トランザクションごとに EM/セッションを開いて、最初に Bean をマージしてください。

あなたの質問は非常に複雑で答えるのが難しいですが、これらのリンクがあなたの理解に役立つことを願っています:

hibernate の Pojo バインディング戦略

https://vaadin.com/forum#!/thread/39712

MVP-lite

https://vaadin.com/directory#addon/mvp-lite (イベント駆動パターンに固執)

于 2013-07-24T23:22:24.757 に答える