私はJPAを初めて使用し、ステートレスとステートフルの使用と違いを理解できません。
経験はありますか?
よろしく、ヘイザム
StatelessとStatefulは EJB セッション Bean の概念であり、JPAの概念ではありません。
注: JPA は EJB 仕様の一部ですが、EJB コンテナーの外部で個別に使用できます。これが通常、混乱の原因です。
編集済み:便利な SO スレッド、Why Use Stateful Session Beans。
「ステートフル」と「ステートレス」は、セッション Bean の属性です。
セッション Bean (簡単に言うと) は、アプリケーション サーバーでメソッドを呼び出す方法を提供します。Bean は Java クラスのインスタンスです。通常、Bean はリモート メソッドが終了した後 (そして結果を返した後) に破棄されます。これらの Bean は「ステートレス」です。
フィールドと属性を Bean に追加して、クライアントがサーバー上でこのインスタンスを「作成」し、それを複数の操作に使用できるようにすることは可能です (ただし、かなり珍しいことです)。これらの Bean は「ステートフル」です (避けるべきです)。
ステートフルとステートレスは、JPA 仕様に固有のものではなく、EJB (Java EE コンテナー管理セッション Bean) のプロパティです。ステートフルBean には、同じクライアントからのリクエストごとに関連付けられた状態があります。ステートレスBean にはクライアント固有の状態がなく、単一のインスタンスを複数のクライアント要求間でスレッドセーフに同時に使用できます。
JPA は、ステートフル Bean を永続化するために使用できる永続化戦略の 1 つです (JDBC を直接使用したり、他の永続化戦略をプラグインしたりすることもできると思います)。
混乱の一部は、Java Persistence API が EJB3 仕様の一部であり、時々 EJB と同じ意味で使用されているように見えることだと思います。Pro EJB 3: Java Persistence APIを初めて手にするまで、私はこれを本当に理解していませんでした。http://en.wikipedia.org/wiki/Enterprise_JavaBeanをご覧ください。この件に関する概要がよくわかるようです。