创建Hibernate SessionFactory时如何设置数据源?

我正在创建SessionFactory,并在创建SessionFactory的代码中将数据源作为对象,但是无法将数据源设置为Hibernate

Configuration对象。那么如何将数据源设置为SessionFactory?

Configuration configuration = new Configuration();

Properties properties = new Properties();

properties.setProperty("hibernate.dialect", "org.hibernate.dialect.MySQLInnoDBDialect");

configuration.setProperties(properties);

configuration.setProperty("packagesToScan", "com.my.app");

SessionFactory sessionFactory = configuration.configure().buildSessionFactory();

回答:

要提供与Session的JDBC连接,您需要实现ConnectionProvider。

默认情况下,Hibernate使用DatasourceConnectionProviderDataSource从JNDI 获取实例。

要使用自定义DataSource实例,请使用实例并将其InjectedDataSourceConnectionProvider注入DataSource其中。

在InjectedDataSourceConnectionProvider上有TODO注释

注意:必须先调用setDataSource(javax.sql.DataSource)才能进行configure(java.util.Properties)。

TODO:找不到setDataSource实际调用的位置。不能仅通过此方法进行配置吗???

根据说明,setDataSource()configure()方法调用方法。

public class CustomConnectionProvider extends InjectedDataSourceConnectionProvider {

@Override

public void configure(Properties props) throws HibernateException {

org.apache.commons.dbcp.BasicDataSource dataSource = new BasicDataSource();

org.apache.commons.beanutils.BeanUtils.populate( dataSource, props );

setDataSource(dataSource);

super.configure(props);

}

}

您还可以扩展UserSuppliedConnectionProvider。

根据ConnectionProvider的合同

实现者应提供一个公共的默认构造函数。

如果通过Configuration实例设置了自定义ConnectionProvider,则Hibernate将调用此构造函数。

Configuration cfg = new Configuration();

Properties props = new Properties();

props.put( Environment.CONNECTION_PROVIDER, InjectedDataSourceConnectionProvider.class.getName() );

cfg.addProperties(props);

以上是 创建Hibernate SessionFactory时如何设置数据源? 的全部内容, 来源链接: utcz.com/qa/410814.html

回到顶部