Red Hat Training

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

11.5. 永続オブジェクトの修正

処理中の永続インスタンス(例:Session によって、ロード、保存、作成、クエリされたオブジェクト)は、アプリケーションが操作します。その際に変更された永続状態は、Sessionフラッシュ されるときに、永続化されます。これは、この章で後述しています。変更を永続化するために、特殊なメソッド(update() のようなもの。これは、別の目的で使用します)を呼ぶ必要はありません。オブジェクトの状態を更新する一番簡単な方法は、オブジェクトを load() し、Session をオープンにしている間に、直接操作することです。
DomesticCat cat = (DomesticCat) sess.load( Cat.class, new Long(69) );
cat.setName("PK");
sess.flush();  // changes to cat are automatically detected and persisted
オブジェクトをロードするには SQL の SELECTが、更新された状態を永続化するには SQL の UPDATE が同じセッションで必要となるので、このプログラミングモデルは効率が悪くなります。Hibernate では分離インスタンスを利用することで別の方法を用意しています。

重要

Hibernate は、UPDATE 文や DELETE 文を直接実行する API を用意していません。Hibernate は、状態管理 サービスであり、それを使うのに 命令文 のことを開発者が考える必要はありません。JDBC は SQL 文を実行する完璧な API であり、session.connection() を呼ぶことでいつでも、 JDBC Connection を開発者は取得できます。さらに、大量のデータ操作の考え方は、オンライントランザクション処理向きアプリケーションのオブジェクト/リレーショナルマッピングと衝突します。しかし、Hibernate の今後のバージョンでは、大量データを処理する特別な機能を提供することができます。バッチ操作に利用できるいくつかの工夫については、14章バッチ処理 を参照してください。