0

私のプロジェクトには多くの hbm.xml ファイルがあり、そこから Java クラスと db の sql を生成しています。buildSessionFactory() を呼び出した後、hbm.xml ファイル内のセマンティック エラーが表示されます。これは、現在の状況では非常に厄介です。少し異なる設定でそれを行うテストクラスが必要です(代わりにebedded derbyを使用してください)。私の現在の「解決策」は次のようになります。

    String dbName = "test";

    try{
        SessionFactory fact = new Configuration().configure()
                                                 .setProperty("hibernate.connection.driver_class","org.apache.derby.jdbc.EmbeddedDriver")
                                                 .setProperty("hibernate.connection.url","jdbc:derby:" + dbName + ";create=true")
                                                 .setProperty("hibernate.connection.username","")
                                                 .setProperty("hibernate.connection.password","")
                                                 .setProperty("hibernate.dialect","org.hibernate.dialect.DerbyDialect")
                                                 .setProperty("hibernate.hbm2ddl.auto","create-drop")
                                                 .buildSessionFactory();
        assertNotNull(fact);

        Session s = fact.openSession();
        assertNotNull(s);

        s.close();
        fact.close();
    }catch(Throwable t){
        fail(t.getMessage());
    }

しかし、これは私の観点からは本当に満足のいくものではありません。また、名前付きクエリなどがすべて問題ないかどうかも確認したいと思います。自動化されたプロセスでその種のテストを行う方法はありますか?

私の質問の 2 番目の部分は、derby がテストに適している場合、テストの終了後にデータベースを自動的に削除できないのはなぜですか? のように URL にパラメータを指定したい

    "jdbc:derby:" + dbName + ";create=true;drop=true"

このソリューションを使用すると、変数 dbName のような名前のディレクトリと、クールではないプロジェクトディレクトリのダービーファイルになります。

4

1 に答える 1

0

名前付きクエリをテストしたい場合、解決策は、偽の引数を使用してテストでそれらを呼び出すことです (クエリはおそらく何も返さないでしょうが、少なくとも hibernate にそれらをチェックさせることになります)。次の行に沿った何か:

 s.getNamedQuery("Whatever").setParameters(...).execute/query

あなたの問題は、すべてのクエリの名前を簡単に取得できないという事実ですか?

derby db に関しては、テストの最後に (たとえば、tearDown で) 作成されたフォルダーを「手動で」削除することはできませんか?)

ダービーベースが作成される場所は、Java プロパティで制御できるようです。

http://db.apache.org/derby/manuals/develop/develop14.html

http://db.apache.org/derby/manuals/develop/develop12.html#HDRSII-DEVELOP-13018

于 2011-07-07T21:44:50.213 に答える