请教hibernate 中session问题

09-03-19 forever1127

目前框架很多,带给我们很大方便,如果抛开这些,单单用hibernate的话,有个问题请大家帮忙考虑下.

在应用数据库分页的时候,用户每申请一页,都会到数据库查询一次返回,那么如果采用hibernate的话,session应该在什么范围内存储,如果是每请求一次都先连接一次,再查询,感觉频繁连接不合适,如果放在session中,又感觉是浪费,影响性能.session中是否存在我既可以放弃数据库连接,又可以把session保持住的情况呢?

还有一个问题:关闭session的作用是什么,仅仅是释放数据库连接吗?

如果采用current session的话,虽然一个线程是唯一的session,但是这个session在应用完一次请求是session.close()的,那维持住他在thread中有何意义?请banq和道友指点!

[该贴被forever1127于2009-03-19 10:26修改过]

[该贴被admin于2009-03-20 10:32修改过]

              

1
banq
2009-03-19 10:38

除了使用Open Sessin In View以外,还要使用缓存(可见Jdon框架应用),降低数据库负载。

http://www.jdon.com/jivejdon/query/taggedThreadList.shtml?tagID=251

[该贴被banq于2009-03-19 10:38修改过]

xmuzyu
2009-03-19 21:48

hibernate中session要么通过Threadlocal绑定到当前的线程,要么绑定到当前的全局JTA事物,而无论是当前线程还是JTA事务,都是一个request,response生命周期,一个周期结束了,session也就相应失效了(因为线程可能已经终止,也可能已经返回线程池来复用,而事务此时也已经结束)。

>>session中是否存在我既可以放弃数据库连接,又可以把session保持住的情况呢?

此时可以采用ManagedSessionContext来扩展持久化上下文,此时变成了跨事务模型了。

对于分页:我有个想法,可以分享一下呵呵。

我们可以通过javascript等客户端技术,在浏览器端缓存当前页面的数据,当分页的时候,先查看当前浏览器端的缓存中有没有数据,如果有就直接获取就好了,如果没有就通过AJAX或者显示同步的去调用后台服务器的程序来填充客户端缓存。这样其实就像rich client.

forever1127
2009-03-20 08:25

->我们可以通过javascript等客户端技术,在浏览器端缓存当前页面的数据,当分页的时候,先查看当前浏览器端的缓存中有没有数据,如果有就直接获取就好了,如果没有就通过AJAX或者显示同步的去调用后台服务器的程序来填充客户端缓存。这样其实就像rich client.

这个是可以,但是对于类似论坛这样的帖子每次请求应该都需要计算总记录数和没一页的记录集,否则就会导致数据不一直,那么这种情况就不能采用缓存的方式了!

猜你喜欢