Spring如何管理Session

BearKin 2009-05-07 03:44:28
RT 我不太了解SPRING 实际上HIBERNATE也不是很了解 拜托给偶讲讲
...全文
1065 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
q307677241 2011-04-15
  • 打赏
  • 举报
回复
BearKin 2009-05-09
  • 打赏
  • 举报
回复
我现在用getCurrentSession()获得SESSION 然后不用延迟加载了 怎样?
goodlucktomyself 2009-05-09
  • 打赏
  • 举报
回复
hibernate 和structs 没有spring 也可以运行,
不过有了它,他们会运行的更好,更有效率,这年头不就
就讲究效率和节约吗....呵呵
BearKin 2009-05-08
  • 打赏
  • 举报
回复
咋没人来捏?
BearKin 2009-05-08
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 yinyuan1987 的回复:]
引用楼主 BearKin 的帖子:
RT 我不太了解SPRING 实际上HIBERNATE也不是很了解 拜托给偶讲讲

Spring如何管理Session :

在使用Spring进行系统开发的时候,数据库连接一般都是配置在Spring的配置文件中,并且由Spring来管理的。在利用Spring + Hibernate进行开发时也是如此。下面是一个简单的Spring + Hibernate Dao的例子:

程序代码public class DaoReal extends HibernateDaoSupport implements Dao {
  pub…
[/Quote]


我现在只是想明白 假设我用了延迟加载 或者我需要对QUERY进行一些操作(这样的话就不能用HibernateDaoSupport的查询方法了) 在这种情况下我要如何管理SESSION 比如什么时候开 什么时候关 是手动执行开关 还是自动执行开关 我基本上不会SPRING 只是稍微有些了解 看看你们都是怎么做的

继续顶...奇怪 偶地帖咋木有人来捏?
  • 打赏
  • 举报
回复
[Quote=引用楼主 BearKin 的帖子:]
RT 我不太了解SPRING 实际上HIBERNATE也不是很了解 拜托给偶讲讲
[/Quote]
Spring如何管理Session :

在使用Spring进行系统开发的时候,数据库连接一般都是配置在Spring的配置文件中,并且由Spring来管理的。在利用Spring + Hibernate进行开发时也是如此。下面是一个简单的Spring + Hibernate Dao的例子:

程序代码public class DaoReal extends HibernateDaoSupport implements Dao {
  public List<User> getAll() {
    return super.getHibernateTemplate().find("from User");
  }
}
  在上面的这个例子中,我们并没有关闭Session,但程序并没有任何问题,那是因为Spring已经帮我们关闭了。那么再看一个例子:

程序代码public class DaoReal extends HibernateDaoSupport implements Dao {
  public List<User> getAll() {
return super.getSession().createQuery("from User").list();
  }
}
  这个例子会不会有问题呢?的确,上面的例子中隐藏了一个问题,数据库连接并没有被关闭,在我们的印象中这件事似乎应该是Spring的。程序执行后,好像也没有什么问题,但是连续执行该语句n次(n<=最大连接数,如果没有指定最大连接数,那么默认为10次)后,系统处于等待状态,不会继续执行了,控制台上并没有输出任何信息。打开log文件,发现系统抛出java.lang.IllegalStateException: Pool not open的异常,无法打开连接。这说明系统连接池中所有的连接都在使用中。那么我们手动关闭Session后,应该就没有问题了吧!是这样吗?修改我们的例子,如下:

程序代码public class DaoReal extends HibernateDaoSupport implements Dao {
  public List<User> getAll() {
    Session s = super.getSession();
    try {
      return s.createQuery("from User").list();
    } finally {
      s.close();
    }
  }
}
  执行n遍后依然停止响应。问题出在哪里呢?其实Spring的Session总是与某个线程绑定的,而这个线程往往就是承载Servlet或Jsp的那个线程,也就是说,它的生命周期scope是request的。在上面的例子中,我们利用getSession强制获得了Hibernate的Session,这个Session可能是当前事务中之前使用过的,或者可能是一个新的,并不在当前事务中,Spring只对当前事务中的Session进行关闭。

  要解决这个问题,方法有很多。可以使用我们之前讲到过的getHibernateTemplate().find()。也可以设定HibernateTemplate的AllowCreate为True,并在finally中关闭Session。也可以将true作为参数传递到super.getSession(..)方法中取得Session。这里的true表示允许创建。
bluedest 2009-05-08
  • 打赏
  • 举报
回复
最主要的思想,还是session跟threadlocal变量绑定。然后再根据spring的事务配置,再决定是否在session一打开的时候,就开启事务,或置身于一个已存在的事务中。
BearKin 2009-05-08
  • 打赏
  • 举报
回复
简单点说给个HIBERNATE整和SPRING的例子 抱歉 没上过几年学... 不过你们进来的时候都没看题目么?....

就是问Spring是如何管理Hibernate Session的.....
老紫竹 2009-05-08
  • 打赏
  • 举报
回复
其实,session还是hibernate的,只不过你不需要自己用代码启动而已,而是Spring自动替你注入了。

没有Spring,Hibenate依然可以运行,而且很好。

Spring就是一个粘合剂,它让你用多个东西时,看上去更好用而已。没别的。但这个理由已经很充分了。
Rachael1001 2009-05-07
  • 打赏
  • 举报
回复
自己看spring的内核说明
lokeey 2009-05-07
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 jinxfei 的回复:]
难道最终会成为散分?

不过,我觉得没楼主这么问的,笼统的讲两个东西,怎么讲,难道开课?
[/Quote]

楼主这么问,我们都不知道怎么讲,你要针对某个问题问
笼统的东西得自己先研究下
SunNDown 2009-05-07
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 jinxfei 的回复:]
难道最终会成为散分?

不过,我觉得没楼主这么问的,笼统的讲两个东西,怎么讲,难道开课?
[/Quote]

呵呵 顶你下 同感:~)
jinxfei 2009-05-07
  • 打赏
  • 举报
回复
难道最终会成为散分?

不过,我觉得没楼主这么问的,笼统的讲两个东西,怎么讲,难道开课?
yunyouyou 2009-05-07
  • 打赏
  • 举报
回复
没人来啊


坐到等。
BearKin 2009-05-07
  • 打赏
  • 举报
回复
JAVA2000_NET不理我
miaoliujun 2009-05-07
  • 打赏
  • 举报
回复
我也搬个板凳坐下来听JAVA2000_NET讲
BearKin 2009-05-07
  • 打赏
  • 举报
回复
对了 最好给个例子啊

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧