如何从Hibernate配置获取数据源

时间:2013-06-18 13:51:03

标签: java hibernate datasource hibernate-mapping

我想从hibernate Configuration programmaticaly获取数据源。这是我写的代码:

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)

我正在执行一些数据库迁移,我需要将数据源传递到我的迁移工具programmaticaly。

似乎问题伴随着buildSessionFactory这一事实,因为hibernate试图将实体映射到数据库中的表。

属性"hibernate.hbm2ddl.auto"设置为validate

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

1 个答案:

答案 0 :(得分:1)

您获得的错误与检索DataSource无关。这是因为Hibernate正在使用数据库验证数据模型,并且没有发现它在同步中。您可以完全删除hibernate.hbm2ddl.auto属性,然后将其默认为none,并且不会进行任何验证。