hibarnate
Hibernateをいじる(5)
- 2005-10-24 (月)
- テクノロジー
-


いよいよ、動かしてみます。
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(); HibernateUtil.closeSession();
次回からは、もう少し高度なことをやってみます。

