原来是 延迟初始化(延迟加载)(Lazy Initialization)出错,后来被我不小心改掉了,就成了这个样子。

解决方案 »

  1.   

    为何是:String strQry = "from User";
    不是这样的吗:String strQry = "select * form User";
      

  2.   

    建议用Object[] obj = (Object[]) it.next();,你确定取出的数据可以直接cast成(User)吗。只能看出这一点。
    btw:用session1.beginTransaction同步吗
      

  3.   

    为何是:String strQry = "from User";
    不是这样的吗:String strQry = "select * form User";
    ---
    直接"from User"是没问题的,这是HQL的语法;
      

  4.   

    如果把代码改造直接写在jsp中,一切正常:
    -----
    <%
    try {
                Session  session1 = HibernateSessionFactory.currentSession();
                Transaction tx = session1.beginTransaction();
                String strQry="from User";
                Query query = session1.createQuery(strQry );
                for (Iterator it = query.iterate(); it.hasNext();) {
                    User user1 = (User) it.next();
                    out.println("user: "+user1.getUser_id()+"::" + user1.getUser_name() +",password:"+user1.getUser_pass()+ "<br>");
                }
                tx.commit();
                HibernateSessionFactory.closeSession();
            } catch (HibernateException e) {
                e.toString();
            }
    %>
    -----
    这是为何?
      

  5.   

    HibernateSessionFactory.closeSession();放在地方啦
    ------
    manzhi(学习)老兄,有话慢慢说,
    是放错地方了吗?该放在哪?
      

  6.   

    般放在finall里
    HibernateSessionFactory.closeSession();users[i] = (User) it.next();//这行出错!]
    返回的值填充数组?没这样的写法吧.
    你的hql,就是返User所有实例,用就行了.还有users[i] 是个null引用,而且while 里也不存在迭代数组,i++只不过是i值递补增.你的程序根本编译不了,所以出现NullPointerException.
    事实上你这里用session.iterator()就可以啦说错了不要怪:)
    要不这样试下
    public User[] getUsers() {
        try {
          Session session1 = HibernateSessionFactory.currentSession();
          Transaction tx = session1.beginTransaction();
          String strQry = "from User";
          Query query = session1.createQuery(strQry);
         return (User[]) query.list().toArray(new User[query.list().size()]);
      

  7.   

    般放在finall里
    HibernateSessionFactory.closeSession();users[i] = (User) it.next();//这行出错!]
    返回的值填充数组?没这样的写法吧.
    你的hql,就是返User所有实例。这里的users[i] 是个null引用,而且while 里也不存在迭代数组,i++只不过是i值递增.你的程序根本编译不了,所以出现NullPointerException.事实上你这里用session.iterator()就可以啦说错了不要怪:)
    要不这样试下
    public User[] getUsers() {
        try {
          Session session1 = HibernateSessionFactory.currentSession();
          Transaction tx = session1.beginTransaction();
          String strQry = "from User";
          Query query = session1.createQuery(strQry);
         return (User[]) query.list().toArray(new User[query.list().size()]);