转至:http://quyulu.blog.163.com/blog/static/3191360520101114115837861/
在项目中遇到数据库连接开了没有关闭导致在客户那边部署后网站运行了没多久就死了。连接不上数据库了。。
这是一篇搜索到的文章。。手动关闭session、仅供参考
一.getHibernateTemplate()更换getSession(),手动关闭session
问题:操作CLOB字段时出错
javax.servlet.ServletException: Could not commit Hibernate transaction; nested exception is org.hibernate.TransactionException: Transaction not successfully started
//***********新增********************// public boolean newDataObj(Object obj) { boolean ret=true; Session session=this.getHibernateTemplate().getSessionFactory().openSession(); try{ Transaction tx=session.beginTransaction(); session.save(obj); tx.commit(); } catch(Exception e){ e.printStackTrace(); logger.error(e); ret=false; } finally { if (session!= null && session.isOpen()) { session.close(); session = null; } } return ret; } //***********更新********************// public boolean updateDataObj(Object obj) { boolean ret=true; Session session=this.getHibernateTemplate().getSessionFactory().openSession(); try{ Transaction tx=session.beginTransaction(); session.update(obj); tx.commit(); } catch(Exception e) { e.printStackTrace(); logger.error(e); ret=false; } finally { if (session!= null && session.isOpen()) { session.close(); session = null; } } return ret; } //***********删除********************// public boolean deleteDateObj(Object obj) { boolean ret=true; Session session=this.getHibernateTemplate().getSessionFactory().openSession(); try { Transaction tx=session.beginTransaction(); session.delete(obj); tx.commit(); } catch (Exception e) { e.printStackTrace(); logger.error(e); ret=false; } finally { if (session != null && session.isOpen()) { session.close(); session = null; } } return ret; } //***********删除********************// public List<TDepartment> queryDep(String defaultDisplay) { List depList = null; Session session=this.getHibernateTemplate().getSessionFactory().openSession(); String hql = "from TDepartment tDepartment where tDepartment.isused='1' "; if(defaultDisplay!=null && !defaultDisplay.equals("")) hql += " and tDepartment.defaultDisplay='"+defaultDisplay+"' "; hql += " order by tDepartment.departmentId asc "; try { Query query = session.createQuery(hql); depList = query.list(); session.close(); } catch (HibernateException e) { e.printStackTrace(); } finally { if (session!= null && session.isOpen()) { session.close(); session = null; } } return depList; }
注:
1.使用getSession()方法你只要继承sessionFactory,而使用getHibernateTemplate()方法必须继承
HibernateDaoSupport当然包括sessionFactory,这点区别都不是特别重要的,下面这些区别就很重要了
2.getSession()
方法是没有经过spring包装的,spring会把最原始的session给你,在使用完之后必须自己调用相应的close方法,
而且也不会对声明式事务进行相应的管理,一旦没有及时关闭连接,就会导致数据库连接池的连接数溢出,
getHibernateTemplate()
方法是经过spring封装的,例如添加相应的声明式事务管理,由spring管理相应的连接。
在实际的使用过程中发现的确getHibernateTemplate()比getSession()方法要好很多,但是有些方法在
getHibernateTemplate()并没有提供,这时我们用HibernateCallback 回调的方法管理数据库.
getSession() 获得的是原始的sessionFactory,每次你必须自己维护session如结束后你必须关闭session。如果是hibernate中进行数据库操作,你获得是原始的hibernate style和excepttion。
而hibernate template是spring包装过的,它会帮你管理session,并且它会将hibernate exceptions转换成其他的分类后的错误。这点getSession是肯定不行了。例如你用orcle和mysql返回的错误在getSession中就是不一样的,而在hibernate template中就是一样的。
实际使用中发现,对于基本的操作Hibernate template处理的的确比getSession要好,但到了复杂查询的时候如分页时需要调用getHibernateTemplate().execute(HibernateCallBack).要产生很多innerClass,调试非常不便。而getSession就相当简单多了。
=======================================================
二. 延迟加载
问题:无法加载关联项
错误页面提示
could not initialize proxy - no Session
控制台
org.hibernate.LazyInitializationException: could not initialize proxy - no Session
<many-to-one
name="fkTDepartment"
column="FK_T_DEPARTMENT"
class="com.commonfile.hibernate.TDepartment"
lazy="false"
注: 在hibernate中:hibernate3 默认支持延迟加载(lazy="proxy"我们可以把proxy看作是true),hibernate2 默认立即加载 (lazy="false")。 在hibernate3中,所有的实体设置文件(user.hbm.xml)中的lazy属性都被默认设成了true,就是当这个类没有被调用时,延时加载,导致了以上情况的发生,在配置文件中将lzay属性设为false =============================================================================== 三.SQL语句 查询出错
select new TUser(tUser.id,tUser.userName,tUser.department,tUser.fkTStation,tUser.unitFlag) from TUser tUser where tUser.id != 'f' and tUser.isused=1 and tUser.id not in (00309,00324,00338,00313,00311,00337) order by tUser.department.codepath, tUser.fkTStation.sequence,tUser.unitFlag, nlssort(tUser.userName,'NLS_SORT=SCHINESE_PINYIN_M')
注: hibernate3不支持没有单引号“’”的条件查询
发表评论
-
Myeclipse 快捷键自动补全
2014-01-05 12:33 1124就比如在myeclipse里 ... -
java 异常
2013-08-20 16:23 616运行时异常: ArithmeticException ... -
去时间加减处理
2012-09-14 11:15 852转:不错的时间处理方法的文章 http://alexfc.i ... -
去String里面的数字组成数组
2012-09-06 16:06 1187/** * 将一串字符串取出数字放入数组里面 ... -
Display Tag使用
2012-09-05 13:47 660转: http://shirnie.blog.163.com/ ... -
HQL查简单询语句用法Query
2012-09-03 09:55 122231. HQL查简单询语句用法Query // ... -
Hibernate中HQL函数
2012-09-03 09:52 1013Criteria查询对查询条件进行了面向对象封装,符合编程 ... -
java类文件获取页面的request,session.response
2012-08-28 15:24 839HttpSession session = WebContex ... -
hibernate 级联删除
2012-08-20 17:15 796在实体类映射映射文件里:两种方法 1.在父端的one-to- ... -
HQL多个查询条件时候给参数赋值
2012-08-11 15:06 11007在项目中用到了hql 语句时里面有多个查询条件。 每个查询条 ... -
ssh项目上添加webservice
2012-07-21 12:09 8721最近一个ssh的项目需要添加webservice接口的。 就 ... -
jsp form 提交action 乱码
2012-05-19 11:10 2711今天遇到的一个乱码问题。 感觉很奇怪。 我的jsp的编码 ... -
HQL like 模糊查询
2012-05-19 10:50 19056一个做过的例子。。 public List<Telep ... -
hibernate 配置属性
2012-03-27 11:32 925Hibernate JDBC 属性 ... -
hibernate 连接数据库方言
2012-03-27 11:17 15863.4.1. SQL 方言 表 3.8. Hi ... -
hibernate环境搭建
2012-03-21 12:14 2480我的环境是:eclipse ... -
Hibernate 调用存储过程(二)
2011-11-10 14:34 869前面有一篇文章介绍过一次hibernate调用存储过程 上次 ... -
maven 配置
2011-11-09 23:31 800在 下面上传了一个maven maven需要在环境变量里面 ... -
Persistence.xml 配置说明
2011-11-04 17:31 1379JPA规范要求在类路径的META-INF目录下放置persi ... -
表单提交的几种方法
2011-10-22 12:34 964普通提交: 方法一(submit): < ...
相关推荐
我就是问: getHibernateTemplate()这个方法里没有执行sql语句的方法,只能用hql语句吗?
getHibernateTemplate()查询 hibernate hql
另外,从Spring 2.0开始增加了对命名SQL查询的支持,也增加了对分页的支持。 24.3 Spring对Hibernate的简化 24.3.3 HibernateTemplate的常用方法 void delete(Object entity):删除指定的持久化实例 void delete...
getHibernateTemplate()方法
整合了hibernate的getHibernateTemplate()使用方法 全面详细 带有相应的例子
gethibernatetemplate的find方法,find(String queryString);find(String queryString , Object value);find(String queryString, Object[] values);findByExample(Object exampleEntity);findByExample(Object ...
需要指定的是Spring 1.2.5提供了两套Hibernate的支持包,其中Hibernate 2相关的封装类位于org.springframework.orm.hibernate2.*包中,而Hibernate 3.0的封装类位于org.springframework.orm.hibernate3.*包中,...
property-ref:关联类中用于与主控类相关联的属性名,默认为关联类的主键属性名 单向一对多需在一方配置,双向一对多需在双方进行配置 8.lazy=false:被动方的记录由hibernate负责记取,之后存放在主控...
解决getHibernateTemplate().save ()不能将数据保存到数据库的问题JusterDu 2016-03-15 08:38:57 1857
getHibernateTemplate()有模糊查询和 分页getHibernateTemplate()有模糊查询和 分页
getHibernateTemplate分页-模糊查询.hibernate查询以及分页查询等方法使用。
find(String queryString , Object value); 示例:this.getHibernateTemplate().find("from bean.User u where u.name=?", "test"); 这样的例子里面还有很多
jsp中调用dao的getHibernateTemplate()时,报空指针
这是之前分页的升级版 带国际化 表单验证 用户登录 安全退出 功能都实现了就是不太美观 开发环境 myeclipse6.0 jdk1.6 Tomcat6.0 sql2000 数据库也放到里面了 在db文件夹下 库文件不变 这里就不附带了log.jsp或者log...
Query query = getHibernateTemplate().getSessionFactory().getCurrentSession().createQuery(sql); query.setFirstResult(pageno); query.setMaxResults(3); //设置每页显示的条数 List result = ...
import org.springframework.orm.hibernate3.support.HibernateDaoSupport; import vo.Card; import dao.ICardDAO; public class CardDAOImp extends HibernateDaoSupport implements ICardDAO{ @Override ...
<property name="hibernate.show_sql">true * 测试.放置在junit包下 public class TestHibernate { @Test public void testHibernateConf(){ Configuration ...
文中用的框架版本:spring 3,hibernate 3,没有的,自己上网下。 先说web.xml配置: [java] view plaincopy 01.<?xml version="1.0" encoding="UTF-8"?> 02.<web-app xmlns:xsi=...
Spring 的框架提供了getHibernateTemplate ().findByCriteria(detachedCriteria) 方法可以很方便地根据DetachedCriteria 来返回查询结 果。 DetachedCriteria 提供了 2 个静态方法 forClass(Class) 或 forEntityName...
软件及安装说明 <br> 本系统是一个Struts+Spring+Hibernate组合开发的博客系统,本系统使用分层体系架构,综合运用struts+spring+hibernate 三大主流开源框架构建,稳定高效、功能强大、易于维护。系统分为四个...