Hibernate/JPAの世界で入力を受け取るdataTablesを処理する正しい方法は何でしょうか。私の知る限り、次の3つの選択肢のいずれかが原因で、カードの家全体が崩壊していますが、どちらが間違っているのかわかりません。
- すべてのリクエストの前後でトランザクションを開始およびコミットするカスタムJSFPhaseListenerを介した半自動トランザクションおよびEntityManager処理
- 編集コンポーネントをdataTable内に配置する
- リクエストスコープのEntityManagerからデータをフェッチするリクエストスコープのマネージドBeanを使用する(PrettyFacesの助けを借りてURLからリクエストスコープのBeanにIDを設定する)
- ビュースコープまたはセッションスコープのBeanではなく、リクエストスコープのBeanを使用してdataTableをバックアップします。
JPAを使用したICEfacesdataTableデモが表示されますが、どちらもトランザクションを手動で管理しており、デフォルトでは編集コンポーネントを表示していません。オブジェクトが編集可能に指定される行をクリックし、[保存]をクリックすると、手動で保存をトリガーする前に、オブジェクトを新しいEntityManagerに手動で再接続します。ここでクリックして編集する機能は、適切なオブジェクトが現在のセッションに確実に再アタッチされるようにする方法を提供していると思います。同様の機能がないとどうなるかわかりません。
新しいICEfaces3.0ace:dataTable(旧称PrimeFaces 2.0 dataTable)について私が得ている印象は、ビュースコープまたはセッションスコープのBeanで使用することを目的としているということですが、StaleObjectStateを回避する方法がわかりません。および/またはLazyInitializationExceptions(リクエストAおよびEntityManager AでDAOから出て、EntityManagerBを使用してリクエストBによって変更またはページインされたモデルオブジェクトがある場合)。
ある種の深いfuを介してJavaEEで動作する可能性があると思いますが、Tomcat 6からより洗練されたものにアップグレードする余裕はありません(長期的には私の意図ですが)。また、SpringやSeamなどのクールなものを使い始めるつもりはありません。ICEfacesは私たちにとって十分に奇妙であり、正直言ってあまりにも奇妙です。
要約すると、これらのどれが間違った選択ですか?リクエストスコープのエンティティマネージャー、リクエストスコープのdataTable、またはdataTable内の編集コンポーネントを使用していますか?それとも、ここで他に何か問題がありますか?