精华帖 (1) :: 良好帖 (7) :: 新手帖 (0) :: 隐藏帖 (1)
|
|
---|---|
作者 | 正文 |
发表时间:2011-08-17
其实我想知道在不同方法嵌套事物里面 session是不是只有一个。
还有如果有嵌套方法 其中一个方法是不加事物的,那么这个方法的提交顺序是怎么样的。前面的会不会挂起 |
|
返回顶楼 | |
发表时间:2011-08-17
aa87963014 写道 其实我想知道在不同方法嵌套事物里面 session是不是只有一个。 还有如果有嵌套方法 其中一个方法是不加事物的,那么这个方法的提交顺序是怎么样的。前面的会不会挂起 如果使用HibernateTemplate的话, 每个线程都只有一个Session。 每次执行HibernateTemplate操作的话, Spring会根据这个ThreadLocal的Session资源创建一个Session代理对象(帖子最后讲到了)。并且如果使用HibernateTemplate的话,即便你不开启事务,Spring也会在需要获取Session的时候,隐式开启一个事务,这个事务只是用来获取线程资源(Session等)的。这个隐式的事务不参与持久层操作,效率上不会有影响。 但是如果使用getSession()的话, 在不开启事务的情况下, 每次getSession()都会创建一个新Session、 并且获取一个新Connection。 效率极其低下。 |
|
返回顶楼 | |
发表时间:2011-08-17
http://www.iteye.com/topic/733971O(∩_∩)O哈哈~
|
|
返回顶楼 | |
发表时间:2011-08-30
有个疑问:
就是我用的Criteria来进行查询操作 在HibernateTempleteSupport里好像没有找到Criteria相关的方法 于是我的子类虽然继承了HibernateDaoSupport,但是还是用了getSession方法(为了用session.CreateCriteria),这个时候还是需要我手动关闭session或者我通过事物来关闭session对吧? |
|
返回顶楼 | |
发表时间:2011-08-30
jfzlnyf 写道 有个疑问:
就是我用的Criteria来进行查询操作 在HibernateTempleteSupport里好像没有找到Criteria相关的方法 于是我的子类虽然继承了HibernateDaoSupport,但是还是用了getSession方法(为了用session.CreateCriteria),这个时候还是需要我手动关闭session或者我通过事物来关闭session对吧? 可以使用HibernateTemplate#execute(HibernateCallback); 这样的额、 这个里面获取到的 Session 就可以完全只专注于逻辑而不必管Session的关闭什么的。 如果使用getSession的话、 一定要保证此方法在某个事务边界内,也就是说开启了声明式事务管理。开启了声明式事务管理时使用getSession的效果和HibernateTemplate一样, 但是,如果没有开启事务的话,getSession获取到的Session需要随时关闭,并且即便这样它也是相当低效率的。 |
|
返回顶楼 | |
发表时间:2011-08-30
s929498110 写道 jfzlnyf 写道 有个疑问:
就是我用的Criteria来进行查询操作 在HibernateTempleteSupport里好像没有找到Criteria相关的方法 于是我的子类虽然继承了HibernateDaoSupport,但是还是用了getSession方法(为了用session.CreateCriteria),这个时候还是需要我手动关闭session或者我通过事物来关闭session对吧? 可以使用HibernateTemplate#execute(HibernateCallback); 这样的额、 这个里面获取到的 Session 就可以完全只专注于逻辑而不必管Session的关闭什么的。 如果使用getSession的话、 一定要保证此方法在某个事务边界内,也就是说开启了声明式事务管理。开启了声明式事务管理时使用getSession的效果和HibernateTemplate一样, 但是,如果没有开启事务的话,getSession获取到的Session需要随时关闭,并且即便这样它也是相当低效率的。 3Q,以前一直没关注过这个方法,在你的提示下看了下,果真好用,多谢! |
|
返回顶楼 | |
发表时间:2011-09-16
好贴。顶起来
|
|
返回顶楼 | |
发表时间:2011-11-17
楼主功底挺深的,还行,不错。。。
|
|
返回顶楼 | |