3

エンティティクラスがあり、休止状態でDBの対応するテーブルにいくつかの定数値を設定したい:いくつかのデータを含む複数の行(値がない場合、または置換...)休止状態にこれを行うように依頼するにはどうすればよいですか(理想的には注釈付き)?

私は休止状態 3.2 と春 3.1 を使用しています。

前もって感謝します!!!

4

2 に答える 2

2

デフォルトでは、Hibernate はファイル「import.sql」(またはプロパティ hibernate.hbm2ddl.import_files で指定されたファイル) の内容をロードしようとします (そのようなファイルがクラスパスのルートに存在する場合)。したがって、「解決策」の 1 つは、値を 1 つだけ保持し、一意の制約を持つテーブルを作成することです。Hibernate がファイルをロードしようとすると、一意の制約が原因で 2 回目のロードに失敗します。私はこれをテストしていませんが、うまくいくはずです。

さて、それがあなたにとって悪いと思われる場合 (私にとってはそうです)、Hibernate がこのファイルをインポートするために使用するコードを確認することをお勧めします。

https://github.com/hibernate/hibernate-orm/blob/4.1.5.Final/hibernate-core/src/main/java/org/hibernate/tool/hbm2ddl/SchemaExport.java#L432

これを @Singleton @Startup EJB として、またはコンテキスト リスナーとして、または同様のものとして実装します。アイデアは、アプリが起動するたびに実行することです。その後、コードはデータベースが空かどうかをチェックし、必要に応じて SQL ファイルをインポートします。

于 2012-08-07T13:26:40.383 に答える
0

いつテーブルにデータを入力しますか?

アプリケーションの起動時にデータベースの状態を確認し、Spring ContextLoaderListenerを使用してテーブルが空の場合はいくつかのテーブルにデータを入力します (次のようになります)。

public class ExampleContextLoaderListener extends ContextLoaderListener {
    private static Log LOG = LogFactory.getLog("ContextLoaderListener");

    public void contextInitialized(final ServletContextEvent event) {

        super.contextInitialized(event);

        final DBService dbService =
            getCurrentWebApplicationContext().getBean(DBService.class);
        if (!db.initalized()) {
            LOG.info("DB empty ... adding new data");
            // etc.
        } else {
            LOG.info("DB already initalized.")
        }

    }
}

テーブルが空かどうかをテストする方法も参照してください。

于 2012-08-07T12:52:06.503 に答える