2011-07-08 2 views
0

Seam EntityQueryのAjax順序付け/ページ分割サポートには、hereというコードが使用されています。コードそのものはうまくいっていて、さまざまなパラメータで問題なくデータを並べ替えることができます。エンティティ自体はSQLテーブルではなく、JPA(Hibernate)エンティティにマップされたSQLビューです。これは、SELECT文に固執し、INSERTまたはUPDATEを実行しない限り、問題なく動作しているようです。私のバックエンドDBはPostgreSQL 8.4です。私は、VIEWの更新サポートを可能にする条件付きのTRIGGERを実装していません。トランザクションのないSeam EntityQuery?

私の問題は、EntityQuery.next()またはEntityQuery.previous()メソッドを使用して結果の1ページから別のページに移動するときに問題があります。ページリクエスト全体がトランザクションにラップされているように見えます。次のボタンをクリックすると、EntityオブジェクトのUPDATEを実行しようとします。私はEntityQueryのnext()メソッドをオーバーライドしており、その操作は正常に行われます。しかし、ビューがレンダリングされる直前および終了直後に、試行されたUPDATEが発生します。私のEntityオブジェクトはバックエンドDB上で更新できません(VIEW以降)ので、例外がスローされます。

このEntityQueryの使用時にトランザクションが開かれないようにする方法はありますか?私はEntityオブジェクトに@ReadOnlyを注釈付けしようとしました。それはうまくいかなかった。私はEntityQueryに@Transactional(NEVER)を追加しようとしました。それはうまくいかなかった。他のアイデア?

答えて

0

コンポーネントのセッションスコープに変更してみてください。そうすることで、seamはデータベースにアクセスするのではなく、メモリからオブジェクトをロードします。

@Scope(ScopeType.SESSION) 
関連する問題