インメモリHSQLデータベースで実行されるいくつかの統合テストを備えたSpring/HibernateWebアプリがあります。 Hibernateはこの空白のデータベースを取得し、hbm2ddl = createのおかげですべてのテストテーブルと制約を作成します。ただし、afterPropertiesSet()メソッド中にデータベースから特定の構成値をチェックする新しいBeanがあるため、このBeanが初期化されるとき、そのような行はデータベースに存在する必要があります。
Railのテストフィクスチャと同等のJava/Spring/Hibernateをセットアップする良い方法はありますか? 「このテーブルを作成するときはいつでも、直後にこれらの行を挿入する」ことをHibernateに伝える方法を見つけようとしています。追加できるコールバックやフックが見つかりませんでしたが、別の方法があるかもしれません。
「このテーブルを作成するときはいつでも、すぐにこれらの行を挿入する」ことをHibernateに伝える方法を見つけようとしています。
Hibernate 3.1以降、Hibernateのランタイムクラスパスにimport.sql
というファイルを含めることができ、スキーマのエクスポート時に、Hibernateはスキーマのエクスポート後にそのファイルに含まれるSQLステートメントを実行します。
この機能は ロッテルダムJBugとHibernateのimport.sql ブログ投稿で発表されました:
import.sql:ユニットテストでデータを簡単にインポートできます
Hibernateには、文書化が大幅に不足していて不明な、きちんとした小さな機能があります。データベーススキーマ生成直後の
SessionFactory
作成中にSQLスクリプトを実行して、新しいデータベースにデータをインポートできます。クラスパスルートにimport.sql
という名前のファイルを追加し、create-drop
プロパティとしてcreate
またはhibernate.hbm2ddl.auto
のいずれかを設定する必要があります。クエリの章を開始したので、Hibernate Search inActionに使用します。単体テスト用の新しいデータセットでデータベースを初期化します。 JBoss Seamは、さまざまな例でもこれを頻繁に使用します。
import.sql
は非常に単純な機能ですが、非常に便利です。 SQLはデータベースに依存している可能性があることに注意してください(移植性があります!)。#import.sql file delete from PRODUCTS insert into PRODUCTS (PROD_ID, ASIN, TITLE, PRICE, IMAGE_URL, DESCRIPTION) values ('1', '630522577X', 'My Fair Lady', 19.98, '630522577X.jpg', 'My Fair blah blah...'); insert into PRODUCTS (PROD_ID, ASIN, TITLE, PRICE, IMAGE_URL, DESCRIPTION) values ('2', 'B00003CXCD', 'Roman Holiday ', 12.98, 'B00003CXCD.jpg', 'We could argue that blah blah');
この機能の詳細については、チェックしてください Eyalのブログ 、彼はそれについての素敵な小さなエントリを書きました。データベースオブジェクト(インデックス、テーブルなど)を追加する場合は、補助データベースオブジェクト機能を使用することもできます。
それはまだ実際には文書化されていません。
Hibernate 3.6では、任意のSQLコマンドを実行できるようにする構成は次のとおりです。
hibernate.hbm2ddl.import_files
http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html_single/ を参照してください。ドキュメントにエラーがあることに注意してください。プロパティはimport_filesであり、最後にs。
JUnitテストについて話していて、 AbstractTransactionalDataSourceSpringContextTests を使用している場合は、 onSetupBeforeTransaction のようにオーバーライドできるメソッドがあり、テストテーブルデータなどを事前入力するためのフックを提供します。