2017-09-05 4 views
1

私はSpring MVCプロジェクトを実行しています。すべてのデータを新しいTomcatスタートにリセットするフォームボタンが必要です。私たちは、開発環境の起動時にいくつかのダミーデータを埋め込むために、import.sqlスクリプトを使ってHibernateを使用しています。私はボタンをクリックするだけでインスタンスが単純にこの状態に戻るという解決策を探しています(つまり、本質的にはcreateのHibernate ddl-autoとimport.sqlのインポート)。もちろんこれは本番環境では実行されません。Spring/Tomcatプロジェクトのすべてのデータをリセットするにはどうしたらいいですか?

import.sqlの内容をプログラマチックな(Java設定ベースの)ソリューションに変換することもできます。

すでにこの質問に対する回答がありますが、まだ見つかりませんでした。重複している場合は閉じます。

答えて

1

このSO questionは、あなたが何をする必要があるかと非常によく似ているを取得します。

あなたがする必要があるのは、ボタンをクリックするだけです。

Connection conn = (Connection) DriverManager.getConnection("jdbc:mysql://localhost/?user=user&password=pass"); 
    Statement statement = (Statement) conn.createStatement(); 
    statement.executeUpdate("DROP DATABASE tcs;"); 
    statement.executeUpdate("CREATE DATABASE tcs charset=utf8 collate=utf8_persian_ci;"); 

次に、あなたは、Hibernateは、テーブルを再作成するために提供buildSessionFactoryメソッドを呼び出す必要があります。

私はそれが役に立ちそうです。

+1

これはこれまでのところ最も近い解決策のように思えますが、私はもう少し自動化されたものはありません。この質問にはもう数日かかります。 – bphilipnyc

+0

それはあなたのために働いてうれしい、私はもっと簡単なものを見つけることができるかどうかを確認するためにもう少し周りを見ていきます。 –

0

同じjdbcurlを使用して「create-drop」で構成された新しいSessionFactoryを作成するだけでなく、import.sqlスクリプトの内容をロードして実行するのはなぜですか?

@Test 
public void test() { 
    HsqlSessionFactoryCreator creator = HsqlSessionFactoryCreator.getInstance(); 
    try (SessionFactory sessionFactory1 = creator.create()) { 
     try (Session session = sessionFactory1.openSession()) { 
      Transaction transaction = session.beginTransaction(); 
      try { 
       createEntity(...); 

       transaction.commit(); 
      } catch (Throwable throwable) { 
       transaction.rollback(); 
      } 
     } 

     try (Session session = sessionFactory1.openSession()) { 
      System.err.println("SessionFactory1 " + session.createCriteria(MyEntity.class).list()); 
     } 

     try (Session session = sessionFactory1.openSession()) { 
      Transaction transaction = session.beginTransaction(); 
      try { 
       createEntity(...); 

       transaction.commit(); 
      } catch (Throwable throwable) { 
       transaction.rollback(); 
      } 
     } 

     try (Session session = sessionFactory1.openSession()) { 
      System.err.println("SessionFactory1 " + session.createCriteria(MyEntity.class).list()); 
     } 

     try (SessionFactory sessionFactory2 = creator.create()) { 
      try (Session session = sessionFactory1.openSession()) { 
       System.err.println("SessionFactory1 after creating SessionFactory2 " + session.createCriteria(MyEntity.class).list()); 
      } 
      try (Session session = sessionFactory2.openSession()) { 
       System.err.println("SessionFactory2 " + session.createCriteria(MyEntity.class).list()); 
      } 
      try (Session session = sessionFactory1.openSession()) { 
       Transaction transaction = session.beginTransaction(); 
       try { 
        createEntity(...); 

        transaction.commit(); 
       } catch (Throwable throwable) { 
        transaction.rollback(); 
       } 
      } 
      try (Session session = sessionFactory1.openSession()) { 
       System.err.println("SessionFactory1 " + session.createCriteria(MyEntity.class).list()); 
      } 
      try (Session session = sessionFactory2.openSession()) { 
       System.err.println("SessionFactory2 " + session.createCriteria(MyEntity.class).list()); 
      } 
     } 
    } 
} 

私がテストを実行すると(エンティティについての知識を持ったのSessionFactoryを作成した)、私は次の出力

SessionFactory1 [MyEntity[ID 9c81b1fa-04f5-4572-a945-e16d13ffc187]] 
SessionFactory1 [MyEntity[ID 550e7c5d-6c8c-40ea-8f4b-cfdbf2d92075], MyEntity[ID 9c81b1fa-04f5-4572-a945-e16d13ffc187]] 
SessionFactory1 after creating SessionFactory2 [] 
SessionFactory2 [] 
SessionFactory1 [MyEntity[ID 3748127d-6872-4d9c-84fb-1d83b85c9fe0]] 
SessionFactory2 [MyEntity[ID 3748127d-6872-4d9c-84fb-1d83b85c9fe0]] 
+0

私の正確な実装には、2番目のセッションを開いたままにしなければならないという欠点があります。そうしないと、閉じるときにDBスキーマが削除されます。しかし、うまくいけばそれはあなたにいくつかの役に立つアイデアを与えます –

関連する問題