package com.lh.myblog;
import java.util.ArrayList;
import java.util.List;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;
import com.lh.myblog.Blog;
import com.lh.myblog.SessionFactory;public class DbOperate {
public List getBlogs(int showCount) throws HibernateException {
Session session = SessionFactory.currentSession();
List list=null;
Transaction tx = null;
try {
tx = session.beginTransaction();
Query query = session.createQuery("from Blog order by visitcount desc");
if (showCount>0){
query.setMaxResults(showCount);
}
list = query.list();
tx.commit();
} catch (HibernateException e) {
if (tx != null)
tx.rollback();
throw e;
}
SessionFactory.closeSession();
return list; 
}

// public static void main(String args[]) {
// DbOperate db = new DbOperate();
// List list = new ArrayList();
// list = db.getBlogs(10);
// for(int i=0;i<list.size();i++) {
// System.out.println(list.get(i));
// }
//
// }
}
此类经过独立测试无任何问题,但是在servlet类中:
package com.lh.myblog;import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import com.lh.myblog.Blog;
import com.lh.myblog.DbOperate;public class FirstAction extends HttpServlet {
    
public void init(ServletConfig config) throws ServletException {
    }
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {

     DbOperate db = new DbOperate();     //***************************************************
List blogList=db.getBlogs(10);
    
        response.setContentType("text/xml; charset=UTF-8");
        response.setHeader("Cache-Control", "no-cache");
        PrintWriter out = response.getWriter();
        out.println("<response>");
Blog curBlog=null;
for (int i=0;i<blogList.size();i++){
curBlog = (Blog)blogList.get(i);
        out.println("<blog>");
out.println("<id>" + curBlog.getId() + "</id>");
out.println("<name>" + curBlog.getSubject() + "</name>");
        out.println("</blog>");
}
out.println("</response>");
out.close();
    } protected void doPost(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException, IOException {
this.doGet(arg0,arg1);
}
}
被***********标记的那一行出现错误!debug的时候直接在Eclipse错误页面,错误提示是:
找不到 ApplicationFilterChain.internalDoFilter(ServletRequest, ServletResponse) 行: 307 的源 
鲜红色字样,实在是搞不定了,问了很多人都没能解决这个问题,哪位大侠若能妙手指点一二,他日定将登门拜访!

解决方案 »

  1.   

    public   class   DbOperate   { 

            public List   getBlogs(int   showCount)   throws   HibernateException   
    {
    List list = new ArrayList();
    String hql = "from   Blog   order   by   visitcount   desc";
    try{
    Session session = HibernateSessionFactory.getSession();
    Transaction tx = session.beginTransaction();
    Query query = session.createQuery(hql);
                            if   (showCount> 0){
                                 query.setFirstResult(0);                 //这句代码你怎么会没有呢,我认为分页查询总要个起始行吧
                                 query.setMaxResults(showCount); 
                            }  list = query.list();
    tx.commit();
    }catch (HibernateException e){}
    finally
    {
    session.close();
    }
    return list;
    }
    }我理解你的代码是调用getBlogs()方法实现Hibernate分页查询,你用用我上面的代码看看,应该没问题。我用着没问题!
      

  2.   

    试了,还是不行。新建一个普通类在里面new一个DbOperate类是可以的,但是调用getBlogs方法时在拿session时,控制台里会报一个关于log4j的警告:
    log4j:WARN No appenders could be found for logger (org.hibernate.cfg.Environment).
    log4j:WARN Please initialize the log4j system properly.
    红色,但是不影响查询结果,也不知道是不是跟这个有关。
    这个方法主要是用来查询Blog中人气排名前10位的记录,所以query.setFirstResult(0);这句不要也可以的,谢谢楼上两位:)
    继续ing……
      

  3.   

    initialize   the   log4j   system   properly
    log4j配置有问题吗?
      

  4.   

    不是log4j的问题,log4j的警告错误可以无视的`
      

  5.   

    你在src目录下加个log4j.properties文件试试
    里面随便写几行
    ex:log4j.rootLogger=DEBUG,stdoutlog4j.appender.stdout=org.apache.log4j.ConsoleAppender
    log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
    log4j.appender.stdout.layout.ConversionPattern=%c{1}-%m%n在看看报什么错
      

  6.   

    首先 log4j没有配置好,这个不会影响你的系统我认为getblogs()这个函数是不跟你的持久类里一样,系统找不到函数的句柄该的名试试
      

  7.   

    getBlogs()这个函数在DbOperate里面,实例话DbOperate比如DbOperate db = new DbOperate();的时候需要加载getBlogs()这个函数,此时出错,DbOperate就是我的持久类,经过测试getBlogs()函数里如果直接用JDBC操作完全可以,所以问题可能出在这个函数中的某些Hibernate语句,比如session = SessionFactory.currentSession();哎~~还是对Hibernate理解不深入`
    万分感谢楼上两位!
      

  8.   

      DbOperate db=new  DbOperate();           //无参构造啊
      你的类里面没有无参构造方法啊