2013-12-12 10 views
8

これは統合テストに必要です。私の環境はJBoss 7、EJB3はJPA with Hibernate 4、H2はメモリ内のデータベース、テストはArquillianが担当しています。データベースを削除して再び作成するには、persistence.xmlとエンティティに基づくすべてのテーブルが必要です。私は私が指定することで、アプリケーションの開始時にそれを行うことができます知っている:HibernateでJPAから手動でcreate-dropを呼び出す方法は?

<property name="hibernate.hbm2ddl.auto" value="create-drop" /> 

をしかし、私は最初のドロップ後のコードから手動でこれを行うと起こっを作成する必要があります。

可能ですか?最も簡単な方法は何ですか?

+0

テストの間にスキーマを再作成する必要がありますか、データを切り捨てるだけですか? – FGreg

+0

@FGreg - すべてのデータを切り捨て、import.sqlスクリプトを実行するだけで十分です。回避策はありますが、休止状態で実行する方法がある場合はもっと興味があります... – sm4

+0

JUnitとArquillianの違いはわかりませんが、すべてのデータを切り捨てるJUnitの解決策があります各試験の後に。 JUnitの構造にかなり依存しているので、あなたが興味があれば分かち合うことができます。 – FGreg

答えて

0

スクリプトを手動で作成する必要があると思います。その後、(プロジェクト内のクラスをコピー)ScriptRunnerを使用することができます。

public class YourIntegrationTestClass { 
    private String url = "test-db-url"; 
    private String user = "user"; 
    private String pass = "pass"; 

    // run this before the test 
    public void prepareDB() { 
     // executes a script stored in test/resources/cucumber 
     try { 
      // use your driver here 
      Class.forName("com.mysql.jdbc.Driver"); 
      Connection conn = DriverManager.getConnection(url, user, pass); 
      ScriptRunner runner = new ScriptRunner(conn, false, true); 

      // use your db creation script here 
      runner.runScript(new BufferedReader(new FileReader("createDB.sql"))); 
     } catch (Exception e) { 
      throw new RuntimeException(e.getMessage(), e); 
     } 
    } 

    // run this after the tests 
    public void dropDB() { 
      // use your driver here 
      Class.forName("com.mysql.jdbc.Driver"); 
      Connection conn = DriverManager.getConnection(url, user, pass); 
      ScriptRunner runner = new ScriptRunner(conn, false, true); 

      // use your db drop script here 
      runner.runScript(new BufferedReader(new FileReader("dropDB.sql"))); 
     } catch (Exception e) { 
      throw new RuntimeException(e.getMessage(), e); 
     } 
    } 
} 
+0

scriptRunnerは、より良いSQL解析を行うために、Hibernate ImportSqlCommandExtractor(http://docs.jboss.org/hibernate/core/4.1/javadocs/org/hibernate/tool/hbm2ddl/ImportSqlCommandExtractor.html)を使用することができます(複数行と単一行抽出プログラムを参照) 。乾杯 –

3

あなたがプログラム的に休止状態でこれを行うことができます。

config = new Configuration(); 
config.setProperty(org.hibernate.cfg.Environment.SHOW_SQL, "true"); 
config.setProperty(org.hibernate.cfg.Environment.HBM2DDL_AUTO, "create"); 
.... 
SchemaExport export = new SchemaExport(config); 
export.create(true, true); 

のJavaDocはここにある:

http://docs.jboss.org/hibernate/core/3.5/javadocs/org/hibernate/cfg/Configuration.html http://docs.jboss.org/hibernate/orm/3.5/javadocs/org/hibernate/tool/hbm2ddl/SchemaExport.html

+0

これはあなたのために働きますか?私はそれを試してみましたが、db – mkn

関連する問題