以编程方式提供数据源以休眠

Posted

技术标签:

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

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

【问题讨论】:

我在 SO 中发现了一个问题,可能与您的问题重复(或可能回答您的问题):***.com/questions/4406935/… 【参考方案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();

【讨论】:

以上是关于以编程方式提供数据源以休眠的主要内容,如果未能解决你的问题,请参考以下文章

如何以编程方式为 BIRT 报告设置数据源?

以编程方式将PC置于睡眠模式

以编程方式将 flex spark 数据组滚动到最大数量

以编程方式合并 HSQLDB 数据库

以编程方式将 CSV 数据导入 Access

通过 vb.net 以编程方式创建 Access 数据库