S2Hibernate

@IT The Seasar Projectの全貌を探る(6) SeasarのDBアクセスにHibernateを使う


S2Hibernate が記事になってる〜.珍しい.(^^;
まずは S2Hibernate を取り上げて頂いたことに感謝します.
それから,ドキュメントの間違いを指摘した頂いたことに感謝します.オンラインドキュメントの方は修正しました.


んで,ちょっと気になったところ.
なんで最新の Hibernate 1.1.1 じゃないんだろうということは執筆時期の都合かもしれないということでさておき (といってもリリースは 2 か月も前なんですが),以下の部分.

S2Hibernate1.1.0をHibernate2対応にする
本稿で紹介するS2Hibernate1.1.0はHibernate3対応版ですが、何らかの事情でHibernate2対応にしたい場合には、ダウンロードしたモジュールを以下のように再ビルドする必要があります。

・S2Hibernate1.1.0をHibernate2対応にする方法(再ビルド)

(1)ダウンロードしたモジュールを展開した後に生成されたs2hibernateフォルダにあるbuild.xmlファイルの先頭から12行目を以下のように書き換える
書き換え前 <property name="package" value="org/seasar/hibernate3/" />
書き換え後 <property name="package" value="org/seasar/hibernate/" />
(2)Antを実行してコンパイルとJARファイルの生成を行う
(3)s2hibernate\libフォルダのs2-hibernate-1.1.0.jarファイルが更新され、org.seasar.hibernateパッケージのclassファイルがこのファイルに収められていることを確認


逆に、S2Hibernate1.1.0をHibernate3対応に戻す場合には、build.xmlファイルを書き換え前の状態に戻して再ビルドし、s2-hibernate-1.1.0.jarファイルにorg.seasar.hibernate3パッケージのclassファイルが収められていることを確認してください。

そんなことする必要あったっけ?


気になって S2Hibernate-V1.1.0.zip の中に含まれている s2-hibernate-1.1.0.jar の中を確認してみましたが,Hibernate 2 用と Hibernate 3 用のクラスが両方入ってますよ?
さらに,上で書き換える必要があるとされている build.xml の12 行目ですが...
S2Hibernate-V1.1.0.zip に含まれているヤツの内容は次の通り.

  <property name="package" value="org/seasar/" />

記事中の「書き換え前」と違うんですけど??
著者の方,ご自分でいろいろいじっちゃっただけだったりしないでしょうか?
普通にダウンロードしてきたままだったら上記で引用したような手順は不要なはずです.


もう一つ.

■INSERT、UPDATE、DELETE編

 続いて、INSERT、UPDATE、DELETEの場合も紹介しましょう。HibernateのSessionオブジェクトを直接用いますので、このオブジェクトのメソッドでINSERT、UPDATE、DELETEを行う方法を知っていれば、それと同じ処理をDAOインターフェイスと実装クラスで実行できるようにします。

これは S2Hibernate とは関係のない話ですが,HibernateSession#update()SQL の UPDATE 相当ではありません.
元記事では Hibernate における永続オブジェクトの更新に関する説明はなく,サンプルでも永続オブジェクトの更新は行っていないので,著者が Session#update() を理解しているのか誤解しているのかは判断できませんが,「INSERT、UPDATE、DELETE編」として INSERT と UPDATE を同列に並べるのは読者に誤解を招きかねない表現だと思います.
Hibernate 関連記事では Session#update() はいわゆる UPDATE ではないことをもっと強調すべきではないかと.
っていうか,Hibernate Session と永続オブジェクトのアタッチ・デタッチの説明をしないなら Session#update() は示さない方がいいと思う.


ともあれ (JW),S2Hibernate を取り上げてもらったので,ついでに注意事項を.
S2Hibernate は S2.3.4 では動かないのでご注意ください.
S2.3.3 までなら動くと思いますが,未確認です.ごめんなさい.
週末にでも S2.3.4 対応版を S2Hibernate-1.1.2 としてリリースしたいと思います.
S2Hibernate の 1.1 系列は 1.1.1 で最後の予定でしたが,1.2 系列が未着手なもので...
心より恥じる.


なお,S2Hibernate 1.1.x は Hibernate 2 と Hibernate 3 に対応しています.
S2Hibernate3 EA1 は Hibernate 3 + Hibernate EntityManager + Hibernate Annotations に対応しています.
Hibernate ネイティブの API を使う場合は S2HibernateEJB3 というか Java Persistence API を使う場合は S2Hibernate3 EA1 をお使いください.
ちょっと名前が紛らわしいので,S2Hibernate3 EA1 はいずれ S2Hibernate-JPA とかに名前を変えようと思っています.
あるいは S2Hibernate.dao の Tiger アノテーションサポート (勢いのみ) と一緒に S2Hibernate-Tiger にするかも.