在hibernate3中,使用了c3p0连接池,尝试了多种办法取得connection对象,以下两种可以使用。
view plainprint?
Connection conn;
// 方法1:hibernate4中将要废弃这个方法
conn = session.connection();
// 方法2:这个方法也可以用,速度稍慢
SessionFactoryImplementor sessionFactory = (SessionFactoryImplementor)new Configuration().configure().buildSessionFactory();
conn = sessionFactory.getConnectionProvider().getConnection();
//方法:3
ConnectionProvider cp =((SessionFactoryImplementor)sessionFactory).getConnectionProvider();
cp.getConnection();
2012/06/25
http://zhidao.baidu.com/question/170727565.html
按hibernate的计划,4.0开始将除去Session.connection()这个方法,所以还是最好不要使用它了。
官方的替代方法是用Session.doWork();
如:
view plainprint?
getSession().doWork(
new Work() {
public void execute(Connection connection) {
// 这里已经得到connection了,可以继续你的JDBC代码。
// 注意不要close了这个connection。
}
}
);
================
使用Hibernate的过程中,有时候需要直接使用SQL语句来操作数据库(虽然Hibernate不推荐使用,但是有时候还是会使用到的,比如说批处理),这个时候就要求我们首先获得JDBC的连接。获得JDBC连接的方式有:
1、先获得Session,然后从Session中获得连接
session.connection();
但是这个方法Hibernate不推荐使用,The method connection() from the type Session is deprecated
2、通过ConnectionProvider来获得连接
ConnectionProvider cp =
ConnectionProviderFactory.newConnectionProvider (cfg.getProperties());
cp.getConnection();
这样也可以获得连接。但是实验后发现,通过JDBC连接插入的数据,然后通过Hibernate获取不到。查看数据库发现数据已经插入到了数据库中,另外Hibernate重新加载后也可以看到刚才插入的数据。
刚开始的时候,以为是Hibernate二级缓存的原因,但是把Hibernate的二级缓存关掉以后,任然有这个问题。经过多方查找,最后在Hibernate的官方找到了解决办法,如下:
ConnectionProvider cp =
((SessionFactoryImplementor)sessionFactory).getConnectionProvider();
就是直接从SessionFactory中获得ConnectionProvider ,而不是自己创建一个。自己猜想原因应该是通过SessionFactory获得的连接和自己构造ConnectionProvider 来获得的连接应该是独立的,所以导致通过JDBC插入的数据在Hibernate下看不到。
=================
java.sql.Connection的CON = org.hibernate.jdbc.BorrowedConnectionProxy.getWrap pedConnection(session.connection()来); 解决的第一个问题, 我曾经有一个实例java.sql.Connection的,我能它转换为oracle.jdbc.OracleConnection, 仍然不知道为什么session.connection()来方法已经过时了。
分享到:
相关推荐
本文将详细探讨Hibernate中的事务管理机制及其应用。 【正文】: 1. 事务的四大特性(ACID) - 原子性(Atomicity):事务中的所有操作被视为一个不可分割的单元,要么全部成功,要么全部失败。如果事务中的某...
其中save(FileActionForm fileForm)方法,将封装在fileForm中的上传文件保存到数据库中,这里我们使用FileActionForm作为方法入参,FileActionForm是Web层的表单数据对象,它封装了提交表单的数据。将...
在SSH框架中,通常会利用Hibernate提供的Session来获取数据库连接。具体步骤如下: ```java // 申请变量 Connection conn = null; PreparedStatement ps = null; ResultSet rs = null; // 通过this.getSession()...
5. **事务管理**:在Java中,你可以使用Connection对象的commit()和rollback()方法来控制事务。这在处理多条SQL语句时尤其重要,以确保数据的一致性和完整性。 6. **批处理**:批量处理SQL语句可以提高效率,减少...
94、元素有一个cascade属性,如果希望Hibernate级联保存集合中的对象,casecade属性应该取什么值?(单选)(D) 22 95、以下哪些属于Session的方法?(A,B,C,D,F) 22 96、Hibernate工作原理及为什么要用? 22 97、...
用getFrist()、getBack()、getLast()、getNext()等方法进行取得上一页的页码,下一面的页码就可以了。 看了之后是不是很心动呢~~~ HOHO~~其实我的代码有很多不足,例如:是不是可以做成通用的分页?也可以把DBlink...
#### 六、Struts2中控制器的特征及标签库使用方法 - **控制器特征**: - Action类通常继承自`ActionSupport`类。 - 方法签名通常为`public String execute()`或带有注解的方法。 - **标签库使用方法**: - ...
由于J2EE的开源的框架中提供了MVC模式实现框架Struts、对象关系模型中的Hibernate 的框架及拥有事务管理和依赖注入的Spring。利用现存框架可以更快开发系统。所以选择Java技术作为blog 的开发工具。 为了增加系统的...
熟练掌握JDBC API(如`DriverManager`、`Connection`、`PreparedStatement`、`ResultSet`等)的使用方法,对于实现数据的增删改查等基本操作至关重要。这将帮助开发者更加灵活地与各种关系型数据库进行交互。 ### ...
- **Hibernate ORM**:了解对象关系映射(Object-Relational Mapping)的概念,掌握Hibernate的基本用法。 #### 五、测试与工具 - **单元测试**:熟悉JUnit等单元测试框架,学会编写高质量的测试代码。 - **自动化...
服装分销系统是一个基于Java语言...通过以上技术与设计,基于Java的服装分销系统能有效地提升服装企业的运营效率,实现库存自动化管理,优化订单流程,并提供数据分析支持,从而助力企业在竞争激烈的市场中取得优势。
Java是世界上最流行的编程语言之一,尤其在企业级应用开发领域占据主导地位。这份"java期末考试试题含复习资料"的压缩包显然旨在帮助学生准备Java相关的期末考试,提供必要的学习资源。...祝你在考试中取得好成绩!
### Java面试宝典之数据库结构详解 #### 一、引言 随着信息技术的快速发展,Java作为一门广泛应用的...通过本文的学习,希望能够帮助大家更好地理解Java中的数据库结构及相关知识点,并在未来的职业发展中取得成功。
2.9 如何清除Hibernate Session中的对象 22 2.10 使用日期控件 22 2.11 如何引入外部文件 23 2.11.1 主页面采用include方式,引入各个子页面jsp文件 23 2.11.2 主页面用${ctx}方式,引入超链接或资源文件等。 23 ...