【问题标题】:How to get datasource from Hibernate Configuration如何从 Hibernate 配置中获取数据源
【发布时间】:2013-06-14 18:37:24
【问题描述】:

我想以编程方式从休眠配置中获取数据源。这是我写的代码:

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)

我正在执行一些数据库迁移,我需要将数据源以编程方式传递给我的迁移工具。

问题似乎与buildSessionFactory 的事实有关,因为hibernate 正在尝试将实体与数据库中的表进行映射。

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

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

【问题讨论】:

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

标签: java hibernate datasource hibernate-mapping


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2015-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-09
    • 2011-05-10
    相关资源
    最近更新 更多