Java 如何从Hibernate配置中获取数据源

Java 如何从Hibernate配置中获取数据源,java,hibernate,datasource,hibernate-mapping,Java,Hibernate,Datasource,Hibernate Mapping,我想从hibernate配置程序中获取数据源。以下是我编写的代码: public static DataSource getDatasource(Configuration configuration){ ServiceRegistry registry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry(); SessionFactory

我想从hibernate配置程序中获取数据源。以下是我编写的代码:

public static DataSource getDatasource(Configuration configuration){
    ServiceRegistry registry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry();
    SessionFactoryImpl session = (SessionFactoryImpl)configuration.buildSessionFactory(registry);
    DatasourceConnectionProviderImpl provider = (DatasourceConnectionProviderImpl) session.getConnectionProvider();
    return provider.getDataSource();
}
但我在运行应用程序时遇到了一个异常:

Exception in thread "main" org.hibernate.HibernateException: Missing table: CONTACTS
at org.hibernate.cfg.Configuration.validateSchema(Configuration.java:1281)
at org.hibernate.tool.hbm2ddl.SchemaValidator.validate(SchemaValidator.java:155)
at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:508)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1769)
at com.heavenize.Migrations.getDatasource(Migrations.java:30)
at com.heavenize.Migrations.main(Migrations.java:60)
线程“main”org.hibernate.hibernate异常:缺少表:联系人 位于org.hibernate.cfg.Configuration.validateSchema(Configuration.java:1281) 位于org.hibernate.tool.hbm2ddl.SchemaValidator.validate(SchemaValidator.java:155) 位于org.hibernate.internal.sessionfactorympl。(sessionfactorympl.java:508) 位于org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1769) 位于com.heavenize.Migrations.getDatasource(Migrations.java:30) 位于com.heavenize.Migrations.main(Migrations.java:60) 我正在执行一些数据库迁移,我需要将数据源传递给我的迁移工具programmaticaly

问题似乎来自这样一个事实,即
buildSessionFactory
,因为hibernate正在尝试将实体与数据库中的表映射

属性
“hibernate.hbm2ddl.auto”
设置为
validate


有更好的方法获取数据源吗?

您得到的错误与检索
数据源无关。这是因为Hibernate正在用数据库验证数据模型,但没有发现它处于同步状态。您可以完全删除
hibernate.hbm2ddl.auto
属性,该属性将默认为
none
,并且不会进行任何验证。

您得到的错误与检索
数据源无关。这是因为Hibernate正在用数据库验证数据模型,但没有发现它处于同步状态。您可以完全删除
hibernate.hbm2ddl.auto
属性,该属性将默认为
none
,并且不会进行任何验证。

您是对的,这是由于
hbm2ddl
导致的hibernate初始化问题,即使没有代码,您也会得到它。阅读文档并找到既不创建也不更新也不验证ddl的值。由于
hbm2ddl
,这是Hibernate初始化的一个问题,您是对的,即使没有您的代码,您也会得到它。阅读文档并找到既不创建也不更新也不验证ddl的值。