7

ビューレイヤーとしてWicketを使用し、ORMとしてJPA(Hibernate)を使用するアプリケーションを開発しています。Wicketを使用してUIを構築することは(ajaxを使用しても)楽しいものでした。私の問題は、編集ページに永続オブジェクトを統合することから生じます(読み取り専用ページは、LoadadableDetachableModelを使用しても問題ありません)。

ビューのオープンセッションを提供するために、春からOSIVフィルターを使用しています。ただし、ドメインオブジェクト(@Entityマップクラス)を編集ページに保持しているため、ajaxコールバックでそれらのプロパティにアクセスすると、恐ろしい遅延読み込みの例外が発生します。

DTO / VOの道を進みたくないのは、コードが肥大化するだけで、ボイラープレートコードをたくさん書く必要があるからです。

1つのアイデアは、ビューでモデルオブジェクトを使用し、渡されたオブジェクトを現在の休止状態セッションとマージし、すべてのゲッターにアクセスしてオブジェクトを完全に初期化することでした。この後、オブジェクトはビュー(シード)に格納され、切り離されます。保存したら、それを再マージして変更をコミットします。

これは推奨される方法でしょうか?より良い解決策はありますか?不思議なことに、ほとんどの本/ブログ/ハウツーはそのような問題を完全に無視しています。

どのようなトランザクション管理を提案しますか?現在、サービスレイヤーで@Transactionを使用しています。Hibernateセッション間でデータの保存にアクセスする他の方法を使用する場合、それはどのように変わりますか?

私はここでちょっと迷っているので、どんなポインタ/リンクも歓迎されます。

前もって感謝します

4

4 に答える 4

6

このブログ投稿(LDMの詳細について説明します)は、特に編集シナリオについて、いくつかの優れた洞察を与えてくれました。

スマートEntityModelの構築

FWIW PerfBenchでカスタムRequestCycle(上記のリンクのコメントセクションで提案されている)を使用すると、非常に良い結果が得られました。コードはここにあります。IIRCこれは、Bozhoが投稿したリンクからのアプローチ(OpenSessionInView / London Wicket)を簡略化したものです。

于 2010-01-18T15:31:56.377 に答える
3

これは、Wicketを使用したOpenSessionInViewに関する短いプレゼンテーションです。

適切に使用された場合、OpenSessionInViewアプローチはLazyInitializationException発生しないことを保証する必要があります。

于 2010-01-18T11:33:05.167 に答える
1

私はついにその問題に再び取り組む時間ができました。どうすれば簡単な解決策を見逃すことができたのかわからない;)

UIFormModelWicketsIModelインターフェイスの独自の実装を開発しました。httpリクエスト中にユーザー入力を保持したかったので、detach()呼び出しでは何もせず、モデルオブジェクトを完全な状態に維持(およびシリアル化)しました。

追加する必要があるのは、 detach ()が呼び出さgetObject()れ、 メソッドでそのフラグをチェックするフラグだけでした。フラグが設定されているEntityManager.merge()場合は、UIコンポーネントで使用できる、再接続されたモデルを実行します。

ご入力いただきありがとうございます

于 2010-04-29T07:01:13.753 に答える
0

コンポーネントにモデルとして渡さないLoadadableDetachableModelを使用する場合、wicketはそれらに対して.detatch()を呼び出さず、多くの場合、それらもシリアル化されないため、古いデータがあり、遅延例外がスローされます。

必ずLDMをコンポーネントに渡すか、自分でデタッチしてください。

于 2010-02-26T19:43:37.477 に答える