RT 我不太了解SPRING 实际上HIBERNATE也不是很了解 拜托给偶讲讲

解决方案 »

  1.   

    我也搬个板凳坐下来听JAVA2000_NET讲
      

  2.   

    简单点说给个HIBERNATE整和SPRING的例子 抱歉 没上过几年学... 不过你们进来的时候都没看题目么?....就是问Spring是如何管理Hibernate Session的.....
      

  3.   

    最主要的思想,还是session跟threadlocal变量绑定。然后再根据spring的事务配置,再决定是否在session一打开的时候,就开启事务,或置身于一个已存在的事务中。
      

  4.   

    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表示允许创建。
      

  5.   

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

  6.   

    其实,session还是hibernate的,只不过你不需要自己用代码启动而已,而是Spring自动替你注入了。没有Spring,Hibenate依然可以运行,而且很好。Spring就是一个粘合剂,它让你用多个东西时,看上去更好用而已。没别的。但这个理由已经很充分了。
      

  7.   

    我现在用getCurrentSession()获得SESSION 然后不用延迟加载了 怎样?
      

  8.   

      hibernate 和structs 没有spring 也可以运行,
    不过有了它,他们会运行的更好,更有效率,这年头不就
    就讲究效率和节约吗....呵呵