アプリケーションをデプロイするとき、デプロイメントを簡素化するためにHibernateの能力を使用してデータベーススキーマを作成することがよくあります。これは、hibernate.hbm2ddl.autoプロパティを設定することで簡単に達成できます。
ただし、場合によっては、rootユーザーなどの初期データをデータベースに挿入する必要もあります。何らかの種類のテキストファイルを読み込み、休止状態でこれを実現する方法はありますか?
そうするコードを簡単にプログラムできることは知っていますが、同じビア設定を実現するのに役立つユーティリティが既にあるのではないかと思っていますか?
「Hibernateフィクスチャ」を検索して、これを見つけました。
Hibernateは、エンティティマネージャーファクトリが作成されると(実際には、HibernateのSessionFactoryがエンティティマネージャーファクトリによって作成されると)データベースを作成します。 import.sqlという名前のファイルがクラスパスのルート( '/import.sql')に存在する場合、Hibernateはデータベーススキーマの作成後にファイルから読み取られたSQLステートメントを実行します。 Hibernateはスキーマを作成する前に空にします(スキーマの構築プロセスで作成されるすべてのテーブル、制約、またはその他のデータベースオブジェクトを削除します)。
ソース: http://www.velocityreviews.com/forums/t667849-hibernate-quotfixturesquot-or-database-population.html
試してみて、機能するかどうかをお知らせください!
Import.sqlをクラスパスに追加すると、hbm2ddlがファイルが存在するかどうかを確認して実行します。唯一の追加の詳細は、各sqlコマンドが独自の行にある必要があることです。そうしないと、実行に失敗します。
これは、hbm2ddl.auto
がcreate
またはcreate-drop
に設定されている場合にのみ機能します。
Hibernate設定にhibernateプロパティ hibernate.hbm2ddl.import_files を追加します。 hibernate.hbm2ddl.autoプロパティを作成するように変更します。/classesディレクトリにinitial_data.sqlを追加し、データを挿入する初期SQLコードを追加します。 Hibernateは、データベーススキーマの作成後にこれを実行します。
<bean id="sessionFactory"
class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">${hibernate.dialect}</prop>
<prop key="hibernate.show_sql">${hibernate.show_sql}</prop>
<prop key="hibernate.hbm2ddl.auto">create</prop>
<prop key="hibernate.hbm2ddl.import_files">initial_data.sql</prop>
</props>
</property>
</bean>
Hibernate構成にプロパティを追加したくない場合、/ classesディレクトリにファイルimport.sqlを作成し、プロパティhibernate.hbm2ddl.autoがcreateと等しい場合、デフォルトでhibernateがこれを使用できます。
hbm2ddl.auto
およびhbm2ddl.import_files
プロパティはevil前述のように elsewhere 、使用hibernate.hbm2ddl.auto
およびhibernate.hbm2ddl.import_files
データベース変更管理には、いくつかの重大な欠点があります。
私は個人的にデータベース変更管理にliquibaseを使用し、メンテナンス作業を削減するために次のワークフローを開発しました。
customChange を実装しなければならない複雑な変更であっても、ロールバックの定義、テスト、文書化など、数時間で達成できます。些細な変更の場合、数分です。基本的に、もう少し作業を行う必要があります(1日以内に4つのデータベース構成用にカスタマイズされた変更セットを作成しました)が、データベースを一貫した状態に保つために可能な限りのことをすべて行ったことに安心します。
これに数時間つまずいた後、私は見つけたものを共有することにしましたが、それは非常に古い投稿です。
適切に動作させるには、次のことをしなければなりませんでした。
hbmddl
はcreate
またはcreate-drop
に設定されますresources
フォルダーに入れるだけで、mavenを使用しています。お役に立てば幸いです。
Import.sqlが正しくフォーマットされていることを確認してください。テストする1ライナー挿入ステートメントから始めます。