我正在尝试解决 Web 应用程序中可能存在的配置错误。我想hibernate.hbm2ddl.auto
在运行时从 Hibernate 检索值,可以吗?JPA EntityManager 创建成功。
谢谢
我正在尝试解决 Web 应用程序中可能存在的配置错误。我想hibernate.hbm2ddl.auto
在运行时从 Hibernate 检索值,可以吗?JPA EntityManager 创建成功。
谢谢
检查源代码后,用于构建的所有配置参数都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
要读取配置属性,您可以尝试以下操作:
AnnotationConfiguration conf = new AnnotationConfiguration().configure();
String confValue = conf.getProperty( "hibernate.hbm2ddl.auto" );