0

我正在尝试解决 Web 应用程序中可能存在的配置错误。我想hibernate.hbm2ddl.auto在运行时从 Hibernate 检索值,可以吗?JPA EntityManager 创建成功。

谢谢

4

2 回答 2

2

检查源代码后,用于构建的所有配置参数都SessionFactory将存储在其 Settings属性中。

给定 的实例 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实例中。它仅解析为 autoDropSchema,autoCreateSchema和的不同值autoValidateSchema。您必须使用这些属性来确定 的实际值hibernate.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 回答