0

Web アプリケーションで発生する可能性のある構成バグを解決しようとしています。hibernate.hbm2ddl.auto実行時に Hibernate から値を取得したいのですが、可能ですか? JPA EntityManager が正常に作成されました。

ありがとう

4

2 に答える 2

2

ソース コードを確認すると、ビルドに使用されるすべての構成パラメータがそのSettingsプロパティSessionFactory内に格納され ます。

のインスタンスを指定 すると、次のコードでビルドに使用される をEntityManager取得できます。SessionFactory

Session session = entityManager.unwrap(Session.class);
SessionFactoryImpl sessionImpl = (SessionFactoryImpl)session.getSessionFactory();

そしてSettings、 SessionFactoryImpl からインスタンスを取得します:

Settings setting = sessionImpl.getSettings();

ただし、構成パラメーターからこのインスタンスを構築する方法の次のコードによると:Settings

Settings settings = new Settings();
String autoSchemaExport = properties.getProperty( Environment.HBM2DDL_AUTO );
    if ( "validate".equals(autoSchemaExport) ) {
        settings.setAutoValidateSchema( true );
    }
    if ( "update".equals(autoSchemaExport) ) {
        settings.setAutoUpdateSchema( true );
    }
    if ( "create".equals(autoSchemaExport) ) {
        settings.setAutoCreateSchema( true );
    }
    if ( "create-drop".equals( autoSchemaExport ) ) {
        settings.setAutoCreateSchema( true );
        settings.setAutoDropSchema( true );
    }

の実際の値はインスタンスhibernate.hbm2ddl.autoに格納されません。、およびSettingsの異なる値にのみ解決されます 。これらのプロパティを使用して、 の実際の値を決定する必要があります。autoDropSchemaautoCreateSchemaautoValidateSchemahibernate.hbm2ddl.auto

于 2012-09-03T04:29:09.043 に答える
1

構成プロパティを読み取るには、次のようなものを試すことができます。

AnnotationConfiguration conf = new AnnotationConfiguration().configure();
String confValue = conf.getProperty( "hibernate.hbm2ddl.auto" );
于 2012-09-03T04:08:36.243 に答える