打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
从Hibernate中获得JDBC连接

使用Hibernate的过程中,有时候需要直接使用SQL语句来操作数据库(虽然Hibernate不推荐使用,但是有时候还是会使用到的,比如说批处理),这个时候就要求我们首先获得JDBC的连接。获得JDBC连接的方式有:

1先获得Session,然后从Session中获得连接

     session.connection();

     但是这个方法Hibernate不推荐使用,The method connection() from the type Session is deprecated

在3.3以后的版本中已经被废除了。

2通过ConnectionProvider来获得连接

  1. ConnectionProvider cp = ConnectionProviderFactory.newConnectionProvider(cfg.getProperties());  
  2. cp.getConnection();  


    这样也可以获得连接。但是实验后发现,通过JDBC连接插入的数据,然后通过Hibernate获取不到。查看数据库发现数据已经插入到了数据库中,另外Hibernate重新加载后也可以看到刚才插入的数据。

      刚开始的时候,以为是Hibernate二级缓存的原因,但是把Hibernate的二级缓存关掉以后,任然有这个问题。经过多方查找,最后在Hibernate的官方找到了解决办法,如下:

  1. ConnectionProvider cp =((SessionFactoryImplementor)sessionFactory).getConnectionProvider();  
  2. return cp.getConnection();  


    就是直接从SessionFactory中获得ConnectionProvider ,而不是自己创建一个。自己猜想原因应该是通过SessionFactory获得的连接和自己构造ConnectionProvider 来获得的连接应该是独立的,所以导致通过JDBC插入的数据在Hibernate下看不到。

3直接提供JDBC连接对象Connection:

Class.forName("com.mysql.jdbc.Driver");
String url = "jdbc:mysql://localhost:3306/HibernateTest?user=root&password=";
java.sql.Connection conn = DriverManager.getConnection(url);
SessionFactory sessionFactory = cfg.buildSessionFactory();
Session session = sessionFactory.openSession(conn);

4、Session.doWork

3.3官方的替代方法是用Session.doWork(Work work);

传入的参数work是一个接口,可以HibernateFactory.getSession().doWork(
  new Work() {
    public void execute(Connection connection) {
      // 这里面就得到connection了,    

    }
  }
);
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Hibernate中SessionFactory配置
hibernate使用小结
Hibernate4之配置详解
Hibernate入门之事务管理
Hibernate4实战之第一部分Hibernate入门
Hibernate入门之自己写的小例子的总结-JB--IT之博客
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服