【问题标题】:Programmatically provide datasource to hibernate以编程方式提供数据源以休眠
【发布时间】:2014-08-02 05:47:54
【问题描述】:

我想知道是否可以通过编程方式提供 DataSource 对象来进行休眠配置?
在我们的系统中,我们构造了一个数据源对象(这是一个 Java SE 应用程序),我想从纯 JDBC 代码转移到休眠状态。
如果有人知道 JPA 的答案,这也很好。

【问题讨论】:

标签: java hibernate jpa datasource


【解决方案1】:

您可以使用org.hibernate.cfg.Configuration 对象。

例如 - 一个数据源:

Configuration cfg = new Configuration()
    .setProperty("hibernate.dialect", "org.hibernate.dialect.MySQLDialect")
    .setProperty("hibernate.connection.datasource", "java:/MySQLDS");

或司机经理:

Configuration cfg = new Configuration()
    .setProperty("hibernate.connection.driver_class", "org.postgresql.Driver")
    .setProperty("hibernate.connection.url", "jdbc:postgresql://localhost/test")
    .setProperty("hibernate.connection.username", "user")
    .setProperty("hibernate.connection.username", "pass");

见:Hibernate Programmatic Configuration

【讨论】:

  • 嗨,如果我的代码中有一个数据源类,我想使用它怎么办?
  • 您想配置自己的数据源提供者吗?如果是这种情况,我认为您将必须实现一个DatasourceConnectionProvider,其中包含一个方法setDatasource()。然后你必须在 Hibernate 中设置 hibernate.connection.provider 属性,将你的提供者作为参数传递。
  • @YairZaslavsky 很晚,但没有必要实现连接提供程序。看我的回答。
【解决方案2】:

是的,这是可能的。你只需要实现一个PersistenceUnitInfo:

public class PersistenceOptions implements PersistenceUnitInfo {

    private DataSource jtaDataSource;

    void setJtaDataSource(DataSource jtaDataSource){
        this.jtaDataSource = jtaDataSource;
    }

    @Override
    public DataSource getNonJtaDataSource() {
        return jtaDataSource;
    }

    // ... You will have to implement a bunch of other methods that are used 
    // by Hibernate configuration, like getProperties()
}

用法:

PersistenceOptions options = new PersistenceOptions();
DataSource myFancyDataSource = new BasicDataSource();
options.setJtaDataSource(myFancyDataSource);
EntityManagerFactory emf = new EntityManagerFactoryBuilderImpl(
        new PersistenceUnitInfoDescriptor(options), null
).build();
EntityManager em = emf.createEntityManager();

【讨论】:

    猜你喜欢
    • 2011-07-12
    • 2011-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-19
    • 1970-01-01
    • 2010-11-20
    • 2011-03-23
    相关资源
    最近更新 更多