Red Hat Training

A Red Hat training course is available for Red Hat JBoss Web Server

14.3. StatelessSession インターフェース

また別の方法として、Hibernate はコマンド指向の API を用意しています。これは分離オブジェクトの形で、データベースとのデータストリームのやり取りに使うことができます。StatelessSession は関連する永続コンテキストを持たず、上層レベルのライフサイクルセマンティクスの多くを提供しません。特にステートレスセッションは、一次キャッシュを実装せず、またどのような二次キャッシュやクエリキャッシュとも相互作用しません。トランザクション write-behind や自動ダーティチェックも実装しません。ステートレスセッションを使って行われる操作が、関連するインスタンスへカスケードされることは決してありません。コレクションは、ステートレスセッションからは無視されます。ステートレスセッションを通して行われる操作は、 Hibernate のイベントモデルやインターセプタの影響を受けません。一次キャッシュを持たないため、ステートレスセッションはエイリアスの影響を受けるデータに上手く対処できません。ステートレスセッションは低レベルの抽象化であり、基盤のJDBC にはるかによく似ています。
StatelessSession session = sessionFactory.openStatelessSession();
Transaction tx = session.beginTransaction();
   
ScrollableResults customers = session.getNamedQuery("GetCustomers")
    .scroll(ScrollMode.FORWARD_ONLY);
while ( customers.next() ) {
    Customer customer = (Customer) customers.get(0);
    customer.updateStuff(...);
    session.update(customer);
}
   
tx.commit();
session.close();
このコード例では、クエリが返す Customer インスタンスは即座に 分離されます。これは、どのような永続コンテキストとも決して関連しません。
StatelessSession インターフェースで定義されている insert(), update()delete() の操作は、行レベルの直接的なデータベース操作と考えられます。結果として、 SQL の INSERT, UPDATE または DELETE がそれぞれ即座に実行されます。このように、これらは Session インターフェースで定義されている save(), saveOrUpdate()delete() とは異なる意味を持ちます。