几天前才开始学Java,MyEclipse+struts+hibernate+mysql 的构架刚刚把struts调好,这次又遇到了hibernate的问题。还请懂hibernate的大侠为我指出问题。
按照一个教程搭的构架,运行时候有数据库操作的时候就会出错。如下
HTTP Status 500 - --------------------------------------------------------------------------------type Exception reportmessage description The server encountered an internal error () that prevented it from fulfilling this request.exception java.lang.NullPointerException
com.Hibernate.SessionFactory.currentSession(SessionFactory.java:56)
com.yourcompany.struts.form.AddAdminForm.validate(AddAdminForm.java:52)
org.apache.struts.action.RequestProcessor.processValidate(RequestProcessor.java:942)
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:255)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:507)
javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
note The full stack trace of the root cause is available in the Apache Tomcat/5.5.12 logs.
--------------------------------------------------------------------------------Apache Tomcat/5.5.12
我的SessionFactory是MyEclipse自动生成的,期中的代码基本没改。
package com.Hibernate;import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.cfg.Configuration;/**
 * Configures and provides access to Hibernate sessions, tied to the
 * current thread of execution.  Follows the Thread Local Session
 * pattern, see {@link http://hibernate.org/42.html}.
 */
public class SessionFactory {    /** 
     * Location of hibernate.cfg.xml file.
     * NOTICE: Location should be on the classpath as Hibernate uses
     * #resourceAsStream style lookup for its configuration file. That
     * is place the config file in a Java package - the default location
     * is the default Java package.<br><br>
     * Examples: <br>
     * <code>CONFIG_FILE_LOCATION = "/hibernate.conf.xml". 
     * CONFIG_FILE_LOCATION = "/com/foo/bar/myhiberstuff.conf.xml".</code> 
     */
    private static String CONFIG_FILE_LOCATION = "/hibernate.cfg.xml";    /** Holds a single instance of Session */
    private static final ThreadLocal threadLocal = new ThreadLocal();    /** The single instance of hibernate configuration */
    private static final Configuration cfg = new Configuration();    /** The single instance of hibernate SessionFactory */
    private static org.hibernate.SessionFactory sessionFactory;    /**
     * Returns the ThreadLocal Session instance.  Lazy initialize
     * the <code>SessionFactory</code> if needed.
     *
     *  @return Session
     *  @throws HibernateException
     */
    public static Session currentSession() throws HibernateException {
        Session session = (Session) threadLocal.get();        if (session == null) {
            if (sessionFactory == null) {
                try {
                    cfg.configure(CONFIG_FILE_LOCATION);
                    sessionFactory = cfg.buildSessionFactory();
                }
                catch (Exception e) {
                    System.err.println("%%%% Error Creating SessionFactory %%%%");
                    e.printStackTrace();
                }
            }
            session = sessionFactory.openSession();
            threadLocal.set(session);
        }        return session;
    }    /**
     *  Close the single hibernate session instance.
     *
     *  @throws HibernateException
     */
    public static void closeSession() throws HibernateException {
        Session session = (Session) threadLocal.get();
        threadLocal.set(null);        if (session != null) {
            session.close();
        }
    }    /**
     * Default constructor.
     */
    private SessionFactory() {
    }}

解决方案 »

  1.   

    java.lang.NullPointerException
    com.Hibernate.SessionFactory.currentSession(SessionFactory.java:56)
    com.yourcompany.struts.form.AddAdminForm.validate(AddAdminForm.java:52)
      

  2.   

    NullPointerException 空指针异常
     看看tomcat的日志 里面有明确的错误信息
      

  3.   

    56行是session = sessionFactory.openSession();
    是我的JDBC没装好么?可是我在myeclipse里面能看见我的表啊
    tomcat的日志是2007-5-15 14:49:34 org.apache.catalina.core.AprLifecycleListener lifecycleEvent
    信息: The Apache Portable Runtime which allows optimal performance in production environments was not found on the java.library.path: C:\java\jdk1.6.0\bin;C:\java\Tomcat\bin
    2007-5-15 14:49:35 org.apache.coyote.http11.Http11BaseProtocol init
    信息: Initializing Coyote HTTP/1.1 on http-8080
    2007-5-15 14:49:35 org.apache.catalina.startup.Catalina load
    信息: Initialization processed in 10406 ms
    2007-5-15 14:49:36 org.apache.catalina.core.StandardService start
    信息: Starting service Catalina
    2007-5-15 14:49:36 org.apache.catalina.core.StandardEngine start
    信息: Starting Servlet Engine: Apache Tomcat/5.5.12
    2007-5-15 14:49:36 org.apache.catalina.core.StandardHost start
    信息: XML validation disabled
    log4j:WARN No appenders could be found for logger (org.apache.catalina.session.ManagerBase).
    log4j:WARN Please initialize the log4j system properly.
    2007-5-15 14:49:46 org.apache.coyote.http11.Http11BaseProtocol start
    信息: Starting Coyote HTTP/1.1 on http-8080
    2007-5-15 14:49:46 org.apache.jk.common.ChannelSocket init
    信息: JK: ajp13 listening on /0.0.0.0:8009
    2007-5-15 14:49:46 org.apache.jk.server.JkMain start
    信息: Jk running ID=0 time=0/125  config=null
    2007-5-15 14:49:47 org.apache.catalina.storeconfig.StoreLoader load
    信息: Find registry server-registry.xml at classpath resource
    2007-5-15 14:49:47 org.apache.catalina.startup.Catalina start
    信息: Server startup in 11907 ms
    %%%% Error Creating SessionFactory %%%%
    org.hibernate.HibernateException: JDBC Driver class not found: com.mysql.jdbc.Driver
    at org.hibernate.connection.DriverManagerConnectionProvider.configure(DriverManagerConnectionProvider.java:66)
    at org.hibernate.connection.ConnectionProviderFactory.newConnectionProvider(ConnectionProviderFactory.java:80)
    at org.hibernate.cfg.SettingsFactory.createConnectionProvider(SettingsFactory.java:362)
    at org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:60)
    at org.hibernate.cfg.Configuration.buildSettings(Configuration.java:1463)
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1004)
    at com.Hibernate.SessionFactory.currentSession(SessionFactory.java:49)
    at com.yourcompany.struts.form.AddAdminForm.validate(AddAdminForm.java:52)
    at org.apache.struts.action.RequestProcessor.processValidate(RequestProcessor.java:942)
    at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:255)
    at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
    at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:507)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:868)
    at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:663)
    at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
    at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
    at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
    at java.lang.Thread.run(Thread.java:619)
    Caused by: java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1338)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1187)
    at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:169)
    at org.hibernate.util.ReflectHelper.classForName(ReflectHelper.java:108)
    at org.hibernate.connection.DriverManagerConnectionProvider.configure(DriverManagerConnectionProvider.java:61)
    ... 27 more
    %%%% Error Creating SessionFactory %%%%
    org.hibernate.MappingException: Error reading resource: com/yourcompany/Admin.hbm.xml
    at org.hibernate.cfg.Configuration.addResource(Configuration.java:452)
    at org.hibernate.cfg.Configuration.parseMappingElement(Configuration.java:1263)
    at org.hibernate.cfg.Configuration.parseSessionFactory(Configuration.java:1235)
    at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:1217)
    at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:1184)
    at org.hibernate.cfg.Configuration.configure(Configuration.java:1112)
    at com.Hibernate.SessionFactory.currentSession(SessionFactory.java:48)
    at com.yourcompany.struts.form.AddAdminForm.validate(AddAdminForm.java:52)
    at org.apache.struts.action.RequestProcessor.processValidate(RequestProcessor.java:942)
    at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:255)
    at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
    at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:507)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:868)
    at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:663)
    at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
    at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
    at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
    at java.lang.Thread.run(Thread.java:619)
    Caused by: org.hibernate.MappingException: duplicate import: com.yourcompany.Admin
    at org.hibernate.cfg.Mappings.addImport(Mappings.java:105)
    at org.hibernate.cfg.HbmBinder.bindPersistentClassCommonValues(HbmBinder.java:541)
    at org.hibernate.cfg.HbmBinder.bindClass(HbmBinder.java:488)
    at org.hibernate.cfg.HbmBinder.bindRootClass(HbmBinder.java:234)
    at org.hibernate.cfg.HbmBinder.bindRoot(HbmBinder.java:152)
    at org.hibernate.cfg.Configuration.add(Configuration.java:362)
    at org.hibernate.cfg.Configuration.addInputStream(Configuration.java:400)
    at org.hibernate.cfg.Configuration.addResource(Configuration.java:449)
    ... 27 more
      

  4.   

    JDBC Driver class not found: com.mysql.jdbc.Driver
     驱动装载错误,仔细看看连接JDBC那一部分~~
      

  5.   

    为什么我在Myeclipse里面可以链接数据库呢。有可能是什么错误呢。
      

  6.   

    你没有加载MySQL驱动包
    系统找不到com.mysql.jdbc.Driver
    所以没有成功生成sessionFactory所以你的第56行出现了空指针异常
      

  7.   

    你自己看下你在myeclipse中连接数据库时用的包是否导入到项目中来了
      

  8.   

    确实是jar包没有拷贝到项目里。建立项目以后,加入hibernate,配置数据库的时候点击copy!@#%#!  然后在左面就可以看见jar包加入到数据库中,就可以了。结贴。