Tagbangers Blog

Hibernate ORMをReferenceを読みながら試してみる-2

前回の続きを書きたいと思います。

今回は前回使った「Hibernate Getting Started Guide-4.3.8.Final」の 「Chapter4. Turosial Using the Java Persistence API (JPA)」をやってきます。http://docs.jboss.org/hibernate/orm/4.3/quickstart/en-US/html/ch04.html

JPAとは
JPA (Java Persistence API)とはオブジェクトの世界からリレーショナルの世界へ、あるいはその逆への変換を行うためのAPI。
HibernateはJPAの実装である。

O/Rマッパーが必要な理由
http://codezine.jp/article/detail/5041
オブジェクトとリレーショナルデータベース間のマッピングが難しいことにある。インピーダンス・ミスマッチ。
これを解消するための試みがHibernateなどのO/Rマッパーです。
・プログラムの中にSQL文が混じりこまず、可読性が高まる。
・保守性も優れている
プログラムをよりオブジェクト指向化するためのフレームワークを提供してくれるO/Rマッパーは非常に有難い存在であると。


JPAのプレイヤー紹介
http://codezine.jp/article/detail/5041?p=2
Entityクラス
Entityという言葉は多用されますが一般的にRDBのテーブルを表します。それをオブジェクトモデルとして表現したものがEntityクラスです。この時点でO/Rマッピングの中心となるのがEntityクラスであることが分かります。

Entityオブジェクト
Entityに対し、Entityインスタンスはテーブルの1行を表します。それをオブジェクトモデルとして表現したものがEntityオブジェクトです。つまりEntityクラスをインスタンス化したもの。

Entityマネージャ
Entityオブジェクトを使い、実際のRDBに対しCRUD操作を行います。

Entityマネージャファクトリ
Entityマネージャを生成する役割を持っています。


pom.xml

pom.xmlにhibernate-entitymanagerとhsqldbの情報を書きます。



4.1 persistence.xml

The previous tutorials used the Hibernate-specific <code>hibernate.cfg.xml configuration file. JPA, however, defines a different bootstrap process that uses its own configuration file named persistence.xml. This bootstrapping process is defined by the JPA specification. In JavaTM SE environments the persistence provider (Hibernate in this case) is required to locate all JPA configuration files by classpath lookup of the META-INF/persistence.xml resource name.

---

以前はhibernateに関する情報があるhibernate.cfg.xmlを使っていた。しかし、JPAは persistence.xmlという構成ファイルを使用し、異なるブートストラッププロセスを定めている。ブートストラッピングプロセスはJPA仕様に定義されており、META-INF/persistence.xmlの情報が要求される。。。
つまり、以前はhibernate.cfg.xmlに書かれていたhibernateに関する情報はpersisitence.xmlに記載してあげればJPA仕様によって上手く読み込んでくれるということでしょうか。 なので src/main/resources/META-INF/persistence.xmlを作成してhibernate.cfg.xmlの内容を書きました。




4.2 The annotated entity Java class

次に、Entityクラスにアノテーションをつけます。クラスに@Tableをつけるとdbのテーブルにマッピングされ、インスタンス変数やメッソッドに@Columnをつけるとdbのカラムにそれぞれマッピングされます。
「@Id」と「@GeneratedValue」というアノテーションも利用していますが、@Idはプライマリ・キーに対応するインスタンス変数に指定し、@GeneratedValueはプライマリ・キーを生成する方法を指定するのに使用するそうです。



4.3 Example code

次に、mainメッソッドを持つSampleクラスを作成します。Referenceのコピペですが、createEntityManagerFactoryメッソッド でentityManagerを作ります。entityManagerはentityオブジェクトを使い、dbに対してcrud操作をおこないます。
beginのトランザクション開始を呼び出して新しくインスタンスEventを作り引数として文字列とnewしたDateを渡してます。
そんで、commitして最後に処理をcloseしてます。


Maveでclean、packageを行います。


Sampleクラスを実行。


buildに成功し、sqlが流れます。


dbに登録されましたね。やったね!