在hibernate3中,使用了c3p0连接池,尝试了多种办法取得connection对象,以下两种可以使用。

Java代码 
  1. Connection conn;
  2.  
  3. // 方法1:hibernate4中将要废弃这个方法
  4. conn = session.connection();
  5.  
  6. // 方法2:这个方法也可以用,速度稍慢
  7. SessionFactoryImplementor sessionFactory = (SessionFactoryImplementor)new Configuration().configure().buildSessionFactory();
  8. conn = sessionFactory.getConnectionProvider().getConnection();
  9.  
  10. //方法:3
  11. ConnectionProvider cp =((SessionFactoryImplementor)sessionFactory).getConnectionProvider();
  12. cp.getConnection();

按hibernate的计划,4.0开始将除去Session.connection()这个方法,所以还是最好不要使用它了。
官方的替代方法是用Session.doWork();
如:

Java代码 
  1. getSession().doWork(
  2. new Work() {
  3. public void execute(Connection connection) {
  4. // 这里已经得到connection了,可以继续你的JDBC代码。
  5. // 注意不要close了这个connection。
  6. }
  7. }
  8. );

另外一个方法:

  1. package com.trendcom.base.util;
  2.  
  3. import java.sql.Connection;
  4. import java.sql.SQLException;
  5.  
  6. import javax.sql.DataSource;
  7.  
  8. import org.hibernate.SessionFactory;
  9. import org.springframework.orm.hibernate4.SessionFactoryUtils;
  10. import org.springframework.web.context.ContextLoaderListener;
  11.  
  12. public class DataSourceUtil {
  13.  
  14. private static SessionFactory sessionFactory=null;
  15.  
  16. static{
  17. sessionFactory=(SessionFactory) ContextLoaderListener.getCurrentWebApplicationContext().getBean("sessionFactory");
  18. }
  19.  
  20. public static Connection getConnection(){
  21. try {
  22. return getDataSource().getConnection();
  23. } catch (SQLException e) {
  24. e.printStackTrace();
  25. }
  26. return null;
  27. }
  28.  
  29. public static SessionFactory getSessionFactory() {
  30. return sessionFactory;
  31. }
  32.  
  33. public static void setSessionFactory(SessionFactory sessionFactory) {
  34. DataSourceUtil.sessionFactory = sessionFactory;
  35. }
  36.  
  37. private static DataSource getDataSource() {
  38. return SessionFactoryUtils.getDataSource(getSessionFactory());
  39. }
  40.  
  41. }

hibernate4中取得connection的方法的更多相关文章

  1. hibernate4中使用Session doWork()方法进行jdbc操作(代码)

    Hibernate3.3.2版本中getSession().connection()已被弃用,hibernate4中官方推荐使用Session doWork()方法进行jdbc操作 首先看看Work接 ...

  2. 正确决解Hibernate4.*中:Connection cannot be null when 'hibernate.dialect' not set

    <?xml version='1.0' encoding='UTF-8'?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hi ...

  3. ASP.net中网站访问量统计方法代码(在线人数,本月访问,本日访问,访问流量,累计访问)

    一.建立一个数据表IPStat用于存放用户信息 我在IPStat表中存放的用户信息只包括登录用户的IP(IP_Address),IP来源(IP_Src)和登录时间 (IP_DateTime),些表的信 ...

  4. 使用JDBC从数据库中查询数据的方法

    * ResultSet 结果集:封装了使用JDBC 进行查询的结果 * 1. 调用Statement 对象的 executeQuery(sql) 方法可以得到结果集 * 2. ResultSet 返回 ...

  5. nginx 学习笔记(4) Connection处理方法

    nginx支持connection的多种处理方法.nginx运行的平台确定了可用的处理方法. 在特定平台下connection的多种处理方法中,nginx会自动选择一种最有效的方法.然而,如果需要,你 ...

  6. php面向对象类中常用的魔术方法

    php面向对象类中常用的魔术方法   1.__construct():构造方法,当类被实例化new $class时被自动调用的方法,在类的继承中可以继承与覆盖该方法,例: //__construct( ...

  7. android中The connection to adb is down,问题和解决

    android中The connection to adb is down,问题和解决   自己总结的在android中常会出现的不好解决的问题和方法(其中第三个方法经过了四天的折磨.....哎) 1 ...

  8. HTTP协议中request报文请求方法和状态响应码

    一个HTTP请求报文由4部分组成: 请求行(request line) 请求头部(header) 空行 请求数据 下图给出了请求报文的一般格式: 请求行中包括了请求方法,常见的请求方法有: GET:从 ...

  9. python中requests库使用方法详解

    目录 python中requests库使用方法详解 官方文档 什么是Requests 安装Requests库 基本的GET请求 带参数的GET请求 解析json 添加headers 基本POST请求 ...

随机推荐

  1. BuiltWith

    BuiltWith网站技术信息查询工具 利用该网站所提供的功能,你可以查询出某网站背后是由哪些技术来支持的, 比如操作系统的类型.所采用的访问量统计服务.采用的发布平台.广告平台.语言框架.聚合功能. ...

  2. android开发之自定义组件

    android开发之自定义组件 一:自定义组件: 我认为,自定义组件就是android给我们提供的的一个空白的可以编辑的图片,它帮助我们实现的我们想要的界面,也就是通过自定义组件我们可以把我们要登入的 ...

  3. C++之再续前缘(二)——类和对象(上)

    1.类的构成:数据和函数 public:可以由在类外由类的对象访问 private:只能由类内的成员函数访问 protected:可以由本类的成员函数访问,也可以由本类的派生类的成员函数访问 访问权限 ...

  4. Leetcode 270. Closest Binary Search Tree Value

    Given a non-empty binary search tree and a target value, find the value in the BST that is closest t ...

  5. BZOJ4423 [AMPPZ2013]Bytehattan

    本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000作者博客:http://www.cnblogs.com/ljh2000-jump/转 ...

  6. AutoIt3(AU3)开发的装机小工具,实现快速检测以及一些重用快捷操作功能

    项目相关地址 源码:https://github.com/easonjim/Installed_Tools bug提交:https://github.com/easonjim/Installed_To ...

  7. 关于python

    1.from foo import bar 从foo中import bar,如果bar是一个数组,那么接下来你就可以在你当前程序中直接使用名为bar的这个数组. 2.import bar as foo ...

  8. [iOS 基于CoreBluetooth的蓝牙4.0通讯]

    一.首先大致介绍下蓝牙4.0的模式,中心和周边: 一般情况下,iPhone作为中心,接收来自周边传感器(比如手环等)采集的数据. 二.那整一个数据通讯的协议是怎样的呢? 为什么要一层层搞这么复杂呢?据 ...

  9. C++ 第二次课堂作业(反转链表)

    题目链接: 传送门 GitHub链接: 传送门

  10. 强大的windbg定位内存泄露,两句命令搞定!

    1.简单配置在windbg程序目录下有个gflags.exe,运行后设置: 运行CMD.EXE,输入"D:\Debugging Tools for Windows (x86)\gflags. ...