无
分类: Java
2008-12-03 09:28:40
最近在用 HIBERNATE,全面向对象,挺方便的。但也有些不方便的地方,可能是自己不够精通的缘故,所以出现了很多问题。
下面说说过程吧,我用的是 MyEclipse6.0,要配合 Eclipse3.3 使用,里面自带 Hibernate 插件。安装就不说了,不过不知为什么,插件比较容易出问题,安装完 MyEclipse6.0 后就有时做 Hibernate 反向工程时报错,遇到这种问题时我总是重装解决。
Hibernate 反向工程的使用方法在 MyEclipse 自带的帮助里就有。帮助里不只有一步一步的操作说明,而且还有 Flash 操作动画,我就是参照上面的操作自动生成了 Hibernate 的框架代码,能生成实体类和DAO类,也可以生成HIBERNATE 的配置文件和各个类的配置文件,很方便,但一般需要根据自己的需求改一些配置。生成的代码是由 spring 实例化的,包括连接池什么的。
顺便说一句,实际 MyEclipse 的帮助里有很多东西,包括 WebService 插件(可以生成WEBSERVICE代码,布署等等);Ajax 插件 ATF(AjaxTookitFramework),里面有DEBUG AJAX代码的工具,像FF里面的一样。
刚才扯得有点远,还是看问题吧:需求是这样的,我要开发一个分页查询的东东,但自动生成的代码里没有分页查询的东西,只能自己写一个方法来实现功能。在网上查了一下,Query 里有 setFirstResult(int) 和 setMaxResults(int) 两个方法,就是取从第 firstResult 到第 maxResult 行的数据。于是我写了如下代码类:
|
程序在运行几次之后,就会再无反应,查看调试日志,发现最后会打出如下日志:
[org.hibernate.jdbc.ConnectionManager]-[DEBUG] opening JDBC connection
打完这条就不再打了,明显是数据库连接问题。于是在 MySQL 中查询进程列表 show processlist; 发现当运行这段程序时,进程列表就会加一条记录,运行其它程序则不会。我用的是 commons-dbcp 连接池,肯定不是连接池的问题,因为其它程序没有问题;那肯定是我这段程序没有释放连接。
在网上找了一下,有人说是因为没有提交事务的原因,于是加上了上面被我用 // 注释掉的两句,没有好转。还有人说是 session 没有关闭导致连接没关,于是我又加上了 finally 这段,问题依旧。这个怎么办?
于是看了一下其它方法的实现方式,也看了一些 Spring 的一些原代码,里面是用的 HibernateTemplate 的 find 一些方法做的,没有关于分页查询的。所有的 find 方法里调用的 execute(HibernateCallback action, boolean exposeNativeSession) 方法,我查了一下,HibernateTemplate 里面有这个方法,我照着实现就行了。于是写出了这样的代码:
|
明显是 Spring 的风格^_^,问题解决!
随然解决了问题,但还是不知道以第一段代码的方式如何解决问题。希望高人指点。。。。。。