*1 JPAと略すことがあります。
*2 本稿ではアノテーションを使う方法についてのみ説明します。
*3 グラフ構造とは,各要素と要素間の結合からなる構造のこと。木構造や階層構造(例えばUMLのクラス図)などがグラフ構造です。ここでいう「オブジェクトのグラフ構造」とは,クラスの階層構造とは独立したオブジェクト間の関連を示します。
*4 Java Persistence APIの実装によっては,トランザクションのコミット時に加えてクエリーの実行時に同期化を行うものもあります。
*5 ただし,alpha5には以下の不具合があります。これらの不具合はalpha6で修正される見込みです。
(1)必要であるにもかかわらずアーカイブにantlr-2.7.6rc1.jarが含まれていません。Hibernate 3.1.2のアーカイブを別途ダウンロードし,この中に含まれているantlr-2.7.6rc1.jarを利用してください。
(2)実行すると「You should use the 2.0 version of the Microcontainer xml」という警告がログ出力されます。
(3)実行すると「FATAL 25-02 10:34:29,022 (PersistenceXmlLoader.java:parsePersistenceUnit:101) -custdb JTA」というログが無条件に表示されます。
*6 HibernateはオープンソースのO/Rマッピング・フレームワークです。
*7 Embeddable EJB 3.0 alpha 5では,EJBコンポーネントのデフォルトのJNDI名がalpha 3のときと異なります。alpha 3ではデフォルトのJNDI名にクラスの完全修飾名を使っていましたが,alpha 5では「EJB名/使用するビジネス・インタフェースの種類(localかremote)」に変わっています。このためリスト8のMainクラスではEmployeeDaoの参照を取得するのに「EmployeeDaoBean/local」という名称を使っています。
*8 java.io.Serializableインタフェースは,実装したクラスのオブジェクトがシリアライズ可能であることを示すインタフェースです。このインタフェースにはメソッドは定義されておらず,シリアライズ可能であることを示すためだけに実装します。
*9 テーブルにプライマリ・キーが複数存在する場合には,プライマリ・キーを表すクラスを作成して対応します。その場合,@EmbeddableIdや@IdClassといったアノテーションを使えます。
*10 本稿ではアノテーションを指定する場所はインスタンス変数に統一しています。
*11 「管理された」エンティティに対してさらに修正を加えないのであれば,戻り値を受ける必要はないので
entityManager.merge(employee);
と書いてもかまいません。
*12 EJB 3.0をより深く知るにはEJB 3.0の仕様書やEJB 3.0の実装を提供している企業あるいはコミュニティのドキュメントとサンプル・コードが参考になります。