Tagbangers Blog

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

社内勉強会でHibernateについて学んだので、復習しながらまとめます。

Hibernateとは?
http://www.techscore.com/tech/Java/Others/Hibernat...
んー。Java初学者の私にとっては少し難しですが、ObjectとRDBを上手く関連づけて、
わざわざinsert分を書かなくても、Hibernateが上手く処理してRDBに格納してくれるイメージでしょうか。

今回はReferenceを読みながら、 1.1. Part 1 - The first Hibernate Applicationをやってみます!
version: 4.3.8.Final

IDEにはIntelliJ IDEAを使ってます。


1.1.1. Setup

ビルドツールであるMavenのpom.xmlに使用したいパッケージを書きます。
referenceの内容とだいたい同じですが、JPAでサポートしているversionを書きたしています。



1.1.2. The first class

src/main/java/org/hibernate/tutorial/domain を作成し、その配下にEvent.javaを作ります。データベースにイベントを格納するためのクラスです。
Referenceのコピペでいけました。



1.1.3. The mapping file

src/main/resources/org/hibernate/tutorial/domain を作成し、その配下にEvent.hbm.xmlファイルを作成します。
<hibernate-mapping>タグで囲んで、Eventクラスの要素をデータベース内のテーブルへマッピングします。




1.1.4. Hibernate configuration

次にデータベースを作成します。今回はローカルのDBであるHSQLDBを作成します。
作成できたら、MavenのCommand lineから exec:java -Dexec.mainClass="org.hsqldb.Server" -Dexec.args="-database.0 file:target/data/tutorial"
を実行し、DBへの接続を行います。コマンドを実行すると以下ようなログが出力されます。



src/main/resources の配下にhibernate.cfg.xmlを作成します。データベースへの接続情報?を記載してるっぽいです。
あとで書きますが、propertiesにこの情報を書かないとダメだでした。。。


1.1.5. Building with Maven

Mavenでcleanとpackageを選択してビルドします。成功すると以下のように『BUILD SUCCESS』のログが出力されます。



1.1.6. Startup and helpers

src/main/resources/org/hibernate/tutorial/util の配下にHibernateUtil.javaを作成します。
ここで、return分がありません。と怒られるので、new Configuration().configure().buildSessionFactory(new StandardServiceRegistryBuilder().build() );
をreturnで返えすように書き足します。



1.1.7. Loading and storing objects

src/main/resources/org/hibernate/tutorial/ の配下にEventManager.javaを作成します。


これでMavenのcommand lineから以下のコマンドを実行するとエラー(Access to DialectResolutionInfo cannot be null when 'hibernate.dialect' not set)となりビルドに失敗します。 hibernate.dailect になにも設定されてないとダメですよーとおこられます。


なのでhibernate.propertiesファイルを作成し、hibernate.cfg.xmlに記載されているDBへの接続情報を書いてやります。


これでもう一度先ほどのコマンドを実行するとビルドが成功し、insert分がながれました!
HSQLDBのEVENTSテーブルを確認すると、データがちゃんと格納されてます。 よかった、よかった。



これでReferenceの1.1は終了です。 Referenceには書いてないことも多々あったりしてここまでくるのにかなりの時間をついやしましたが
出来ると嬉しいですね。 ただ、内容をあまり深く理解できていないのでこれから知識を増やしていければとおもいます。