HibernateUtil类:
/*
 * 创建日期 2004-9-16
 *
 * 更改所生成文件模板为
 * 窗口 > 首选项 > Java > 代码生成 > 代码和注释
 */
package com;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import net.sf.hibernate.*;
import net.sf.hibernate.cfg.*;
/**
 * @author Administrator
 *
 * 更改所生成类型注释的模板为
 * 窗口 > 首选项 > Java > 代码生成 > 代码和注释
 */
public class HibernateUtil {
private static Log log=LogFactory.getLog(HibernateUtil.class);
private static final SessionFactory sessionFactory;
static {
try {
// Create the SessionFactory
System.out.println("在hibernateUtil里的得到sessionFactory前!");
sessionFactory = new Configuration().configure().buildSessionFactory();
System.out.println("得到了sessionFactory!");
} catch (Throwable ex) {
log.error("Initial SessionFactory creation failed.", ex);
throw new ExceptionInInitializerError(ex);
}
}
public static final ThreadLocal session=new ThreadLocal();

public static Session currentSession() throws HibernateException{
//Session session=(Session)session.get();
Session s = (Session) session.get();
//open a new session,if this thread has none yet
if(s==null){
s=sessionFactory.openSession();
session.set(s);
}return s;
}

public static void closeSession()throws HibernateException{
Session s=(Session) session.get();
session.set(null);
if(s!=null)
s.close();
}
}
TestCat类:
/*
 * 创建日期 2004-9-17
 *
 * 更改所生成文件模板为
 * 窗口 > 首选项 > Java > 代码生成 > 代码和注释
 */
package com;import net.sf.hibernate.Session;
import net.sf.hibernate.Transaction;
import net.sf.hibernate.Query;
import java.util.Iterator;
/**
 * @author Administrator
 *
 * 更改所生成类型注释的模板为
 * 窗口 > 首选项 > Java > 代码生成 > 代码和注释
 */
public class TestCat {

public void insert()throws Exception{
try{
System.out.println("在TestCat里,要得到session前!");
Session session=HibernateUtil.currentSession();
System.out.println("得到了session!,正要得到事务实例!");
Transaction tx=session.beginTransaction();
System.out.println("得到了事务实例!");
Cat c=new Cat();
c.setName("cat");
c.setSex('f');
c.setWeight(7.14f);
session.save(c);
tx.commit();
HibernateUtil.closeSession();
}catch(Exception e){
e.printStackTrace();
System.out.println("又错了!");
throw new Exception("又错了!");

}finally{
System.out.println("必须执行到这个地方!");
}
}
public void read()throws Exception{
try{
Session session=HibernateUtil.currentSession();
Transaction tx=session.beginTransaction();

Query query=session.createQuery("select cat from Cat as cat where cat.sex=:sex");
query.setCharacter("sex",'f');
for(Iterator it=query.iterate();it.hasNext();){
Cat cat=(Cat)it.next();
System.out.print("the name of cat is: "+cat.getName());
}
}catch(Exception e){
e.printStackTrace();
System.out.println("oh my god is error!");
throw new Exception("oh!my god is error");
}finally{
System.out.println("就知道你会执行到这里!");
}
}
}
Cat.hbm.xml:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping
    PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd"><hibernate-mapping>    <class name="net.sf.hibernate.examples.quickstart.Cat" table="CAT">        <!-- A 32 hex character is our surrogate key. It's automatically
            generated by Hibernate with the UUID pattern. -->
        <id name="id" type="string" unsaved-value="null" >
            <column name="CAT_ID" sql-type="char(32)" not-null="true"/>
            <generator class="uuid.hex"/>
        </id>        <!-- A cat has to have a name, but it shouldn' be too long. -->
        <property name="name">
            <column name="NAME" length="16" not-null="true"/>
        </property>        <property name="sex"/>        <property name="weight"/>    </class></hibernate-mapping>
关且Cat.java,HibernateUtil.java,TestCat.java都在WEB-INF/src/com下

解决方案 »

  1.   

    jsp文件为测试页面
    <%@ page language="java" contentType="text/html;charset=gb2312"%>
    <%@ page import="net.sf.hibernate.Transaction,net.sf.hibernate.cfg.*,net.sf.hibernate.Session"%>
    <%@ page import="net.sf.hibernate.Query,com.HibernateUtil,com.Cat,java.util.*,com.booer.wloa.util.*"%>
    <jsp:useBean id="tc" scope="page" class="com.TestCat"/>
    <!DOCTYPE HTML PUBLIC "-//w3c//did html 4.0 transitional//en">
    <html>
    <head>
    <title>lomboz jsp</title></head>
    <body>
    <%
    System.out.println("start insert()!");
    tc.insert();
    System.out.println("end insert() and start read().");
    //Transaction tx=
    tc.read();
    System.out.println("end read().");
     %>
    </body>
    </html>
    启动tomcat输入http://localhost:8080/test/ht.jsp后出现的错误如下:
    org.apache.jasper.JasperException
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:254)
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:295)
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:241)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:247)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:256)
    at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
    at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
    at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
    at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
    at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2415)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:180)
    at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
    at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:171)
    at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:172)
    at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
    at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:174)
    at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
    at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
    at org.apache.coyote.tomcat4.CoyoteAdapter.service(CoyoteAdapter.java:223)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:594)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:392)
    at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:565)
    at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:619)
    at java.lang.Thread.run(Thread.java:534)
    root cause javax.servlet.ServletException
    at org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:536)
    at org.apache.jsp.ht_jsp._jspService(ht_jsp.java:89)
    at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:137)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:210)
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:295)
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:241)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:247)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:256)
    at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
    at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
    at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
    at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
    at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2415)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:180)
    at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
    at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:171)
    at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:172)
    at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
    at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:174)
    at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
    at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
    at org.apache.coyote.tomcat4.CoyoteAdapter.service(CoyoteAdapter.java:223)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:594)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:392)
    at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:565)
    at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:619)
    at java.lang.Thread.run(Thread.java:534)郁闷中----:
    我想是出现的JSP编译错误,
    跟踪一下是在HibernateUtil.java中的
    sessionFactory = new Configuration().configure().buildSessionFactory();
    一句出现错误,本人想可能是读取hibernate.cfg.xml时出现问题,一直不解,请赐教!谢谢
    100分结贴
      

  2.   

    用这样试试
    SessionFactory sf = new Configuration().addClass(Cat.class).buildSessionFactory();
      

  3.   

    public class DAOSessionFactory {
    private static SessionFactory sessionFactory;
    /**
     * 
     * @return Session
     * @throws HibernateException
     * 返回一个会话
     */
    public synchronized static Session openSession() throws HibernateException {
    if (sessionFactory == null) {
    init();
    }
    return sessionFactory.openSession();
    }
    /**
     * 初始化会话工厂
     *
     */
    private static void init() {
    Configuration conf = null;
    try {
    conf = new Configuration().configure();
    sessionFactory = conf.buildSessionFactory();
    } catch (MappingException e) {
    e.printStackTrace();
    } catch (HibernateException e) {
    e.printStackTrace();
    }
    }
    }
    hibernate.cfg.xml:<hibernate-configuration>    <session-factory>
    <property name="hibernate.connection.datasource">java:comp/env/jdbc/test</property>
            <property name="hibernate.dialect">net.sf.hibernate.dialect.Sybase11_9_2Dialect</property>
            <property name="hibernate.use_outer_join">false</property>
            <!--property name="hibernate.show_sql">true</property-->
            <!--property name="hibernate.cglib.use_reflection_optimizer">false</property--> 
    <property name="hibernate.connection.pool.size">1</property>
    <property name="hibernate.statement_cache.size">25</property>
    <property name="hibernate.jdbc.fetch_size">50</property>
    <property name="hibernate.jdbc.batch_size">30</property>
    <property name="hibernate.transaction.manager_lookup_class">net.sf.hibernate.transaction.JBossTransactionManagerLookup</property>
    <property name="hibernate.cache.provider_class">net.sf.hibernate.cache.HashtableCacheProvider</property>

            <!-- Mapping files -->
            <mapping resource="com/Cat.hbm.xml"/>

        </session-factory></hibernate-configuration>