Hibernateをいじる(5)

いよいよ、動かしてみます。

1.Hibernate設定ファイル

HibernateがどのRDBを使い、マッピングファイルは何を使い…ということを指定するために設定ファイルを書きます。
ファイル名は、hibernate.cfg.xmlがデフォルトで、クラスパス内に置いておきます。

<xml version="1.0" encoding="UTF-8">
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN"  "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
  <session-factory>
    <property name="connection.driver_class">org.hsqldb.jdbcDriver</property>
    <property name="connection.url">jdbc:hsqldb:hsql://localhost/</property>
    <property name="connection.username">sa</property>
    <property name="connection.password"></property>
    <property name="show_sql">true</property>
    <property name="dialect">org.hibernate.dialect.HSQLDialect</property>
    <property name="hibernate.hbm2ddl.auto">create</property>
    <mapping resource="study/domain/Subject.hbm.xml"/>
    <mapping resource="study/domain/Student.hbm.xml"/>
    <mapping resource="study/domain/Report.hbm.xml"/>
    <mapping resource="study/domain/Examination.hbm.xml"/>
    <mapping resource="study/domain/Study.hbm.xml"/>
  </session-factory>
</hibernate-configuration>

ここでのポイントは1つだけ。
hibernate.hbm2ddl.autoです。マッピングファイルから、自動的にRDBにテーブルを作る機能の設定です。
例えば、createにすると、起動するたびにRDBにテーブルを自動生成します。
実際のプロジェクトで使うことがあるかというと微妙ですが、どういうマッピングファイルを書くと、どういうテーブルになるのか、Hibernateが答えを教えてくれるわけです。便利に使いましょう。もちろん、実験する際に重宝しますし。
今回のマッピングファイルは、省略できるものは省略するポリシーでしたから、テーブルの型や桁数等はすべてデフォルトです。
マッピングファイルでは、型名、桁数、NOT NULL等を設定できます。きちんと設定すれば、そのとおりのテーブルになるわけです。

2.HibernateUtilを作る

別に必須ではありませんが、Hibernateのマニュアルに沿って、HibernateUtilを作りました。少し、便利になります。

3.いざ!

例えば、何かを登録してみましょう。

Session session = HibernateUtil.currentSession();
Transaction tx = session.beginTransaction();

//科目の登録
Subject kenpo = new Subject();
kenpo.setCode("14501");
kenpo.setName("憲法");
kenpo.setCredit(4);
session.saveOrUpdate(kenpo);

//学生の登録
Student erika = new Student();
erika.setId("0499001");
erika.setName("三好絵梨香");
session.saveOrUpdate(erika);

tx.commit();
HibernateUtil.closeSession();

参照はこんな感じ。

Session session = HibernateUtil.currentSession();
Query query = session.createQuery("from Student as s where s.name=~");
query.setString(0, "三好絵梨香");
Student erika = (Student)query.uniqueResult();
System.out.println(erika.toString());
HibernateUtil.closeSession();

次回からは、もう少し高度なことをやってみます。

「Hibernateをいじる(6)」につづく

コメントを残す