以编程方式提供数据源以休眠
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();
【讨论】:
以上是关于以编程方式提供数据源以休眠的主要内容,如果未能解决你的问题,请参考以下文章