Hibernateでテーブル構築時に初期データを投入する


最近はもっぱらORMはJPA(Hibernate)を使用しているyamkazuです。こんにちは。

今更かもしれませんがhibernate.hbm2ddl.autoの威力はすごいですね。もはやCREATE TABLEを自分で書いたら負けの気分にさせられます。もう完全にEntityの実装駆動で開発が出来るのでかなりフットワーク軽く開発できます。どうしてもDDLが必要になったときはhibernate3-maven-pluginでEntity情報を元にDDLを生成なんかもできます。
参考: http://unmaintainable.wordpress.com/2008/04/12/hibernate3-schema-creation/

合わせてSpring Rooとか使用しているとDatabaseのDriverとかも簡単に切り替えられるので、チョチョイとテスト用のH2のDDLと、本番用のPostgreSQLDDLとかも簡単に生成できて便利です。

hibernate.hbm2ddl.autoはすごく便利なんですが、個人的に不便だと思ってたのが初期データの構築。適当なユーザー情報とか、マスタデータとかです。なんか無いかなーと検索してたら以下の記事を発見。
http://stackoverflow.com/questions/673802/how-to-import-initial-data-to-database-with-hibernate
どうもクラスパスのルートにimport.sqlとファイルを置いておけば実行されるような事が書いてある!やってみたところ簡単にできました。素晴らしい。

ついでにHibernateの3.6からは

hibernate.hbm2ddl.import_files

http://docs.jboss.org/hibernate/core/3.6/reference/ja-JP/html/session-configuration.html

というプロパティがサポートされているのでコレが使えます。これを使うと任意のファイル名や、複数のSQLファイルが指定できるようになります。ドキュメントにも書いてありますが、どちらの方法を使うにしてもhibernate.hbm2ddl.autoに create か create-drop を指定しているときのみ有効です。

てかjbossのドキュメントにhibernate.hbm2ddl.import_fileとか書いてありますが正しくはhibernate.hbm2ddl.import_filesなのでお間違いないように!小一時間ぐらいはまりました。
コメント欄にあるとおりバグ報告していただいたのでそのうち直っているはず!
http://opensource.atlassian.com/projects/hibernate/browse/HHH-5887