发错了第二个是<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><hibernate-mapping package="cn.hxex.exam.model">
  <class table="select_question" name="cn.hxex.exam.model.SelectQuestion">
    <id name="questionId" column="Que_Id">
          <generator class="uuid.hex"/>
    </id>
    <property name="paperId" column="Paper_Id"/>
      <property name="title" column="Que_Title"/>
      <property name="score" column="Que_Score"/>
      <property name="answer" column="Que_Answer"/>
      <many-to-one column="Paper_Id" cascade="save-update" name="thePaper"/>
  </class>
  <!--<query name="getUserByName"><![CDATA[from User where name=:Name]]></query>-->
</hibernate-mapping>

解决方案 »

  1.   

    把你为空的代码贴出来,是不是没得到sessionFactory ?
      

  2.   

    hbm错的话..它会暴出是哪错了...
    sessionFactory 的话.可能和cfg文件配置有关..
    贴出异常和cfg吧!!
      

  3.   

    HTTP Status 500 - --------------------------------------------------------------------------------type Exception reportmessage description The server encountered an internal error () that prevented it from fulfilling this request.exception javax.servlet.ServletException: java.lang.NullPointerException
    org.apache.struts.action.RequestProcessor.processException(RequestProcessor.java:535)
    org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:433)
    org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236)
    org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
    org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    root cause java.lang.NullPointerException
    cn.hxex.exam.dao.userDao.getUserByName(userDao.java:26)
    cn.hxex.exam.action.action.LoginActionAction.execute(LoginActionAction.java:44)
    org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:431)
    org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236)
    org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
    org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    note The full stack trace of the root cause is available in the Apache Tomcat/6.0.13 logs.
    CFG<?xml version='1.0' encoding='UTF-8'?>
    <!DOCTYPE hibernate-configuration PUBLIC
              "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
              "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"><!-- Generated by MyEclipse Hibernate Tools.                   -->
    <hibernate-configuration><session-factory>
    <property name="connection.url">
    jdbc:mysql://localhost:3306/exam?useUnicode=true&amp;characterEncoding=UTF-8
    </property>
    <property name="dialect">
    org.hibernate.dialect.MySQLDialect
    </property>
    <property name="connection.username">root</property>
    <property name="connection.password">root</property>
    <property name="connection.driver_class">
    com.mysql.jdbc.Driver
    </property>
    <property name="show_sql">true</property>
    <mapping resource="cn/hxex/exam/model/Classes.hbm.xml" />
    <mapping resource="cn/hxex/exam/model/Student.hbm.xml" />
    <mapping resource="cn/hxex/exam/model/Teacher.hbm.xml" />
    <mapping resource="cn/hxex/exam/model/User.hbm.xml" />
    <mapping resource="cn/hxex/exam/model/SelectQuestion.hbm.xml" />
    <mapping resource="cn/hxex/exam/model/Yesno_Question.hbm.xml" />
    <mapping resource="cn/hxex/exam/model/Paper.hbm.xml" /></session-factory></hibernate-configuration>
      

  4.   


    package com.sql.Driver;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 HibernateSessionFactory {    /** 
         * Location of hibernate.cfg.xml file.
         * Location should be on the classpath as Hibernate uses  
         * #resourceAsStream style lookup for its configuration file. 
         * The default classpath location of the hibernate config file is 
         * in the default package. Use #setConfigFile() to update 
         * the location of the configuration file for the current session.   
         */
        private static String CONFIG_FILE_LOCATION = "/hibernate.cfg.xml";
    private static final ThreadLocal<Session> threadLocal = new ThreadLocal<Session>();
        private  static Configuration configuration = new Configuration();
        private static org.hibernate.SessionFactory sessionFactory;
        private static String configFile = CONFIG_FILE_LOCATION; static {
         try {
    configuration.configure(configFile);
    sessionFactory = configuration.buildSessionFactory();
    } catch (Exception e) {
    System.err.println("%%%% Error Creating SessionFactory %%%%");
    e.printStackTrace();
    }
        }
        private HibernateSessionFactory() {
        }

    /**
         * Returns the ThreadLocal Session instance.  Lazy initialize
         * the <code>SessionFactory</code> if needed.
         *
         *  @return Session
         *  @throws HibernateException
         */
        public static Session getSession() throws HibernateException {
            Session session = (Session) threadLocal.get(); if (session == null || !session.isOpen()) {
    if (sessionFactory == null) {
    rebuildSessionFactory();
    }
    session = (sessionFactory != null) ? sessionFactory.openSession(): null;
    threadLocal.set(session);
    }        return session;
        } /**
         *  Rebuild hibernate session factory
         *
         */
    public static void rebuildSessionFactory() {
    try {
    configuration.configure(configFile);
    sessionFactory = configuration.buildSessionFactory();
    } catch (Exception e) {
    System.err
    .println("%%%% Error Creating SessionFactory %%%%");
    e.printStackTrace();
    }
    } /**
         *  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();
            }
        } /**
         *  return session factory
         *
         */
    public static org.hibernate.SessionFactory getSessionFactory() {
    return sessionFactory;
    } /**
         *  return session factory
         *
         * session factory will be rebuilded in the next call
         */
    public static void setConfigFile(String configFile) {
    HibernateSessionFactory.configFile = configFile;
    sessionFactory = null;
    } /**
         *  return hibernate configuration
         *
         */
    public static Configuration getConfiguration() {
    return configuration;
    }}这是由MyEclipse自动生成的代码,在
    public static Session getSession() throws HibernateException {
            Session session = (Session) threadLocal.get(); if (session == null || !session.isOpen()) {
    if (sessionFactory == null) {
    rebuildSessionFactory();//在这之后sessionFactory 还是空所以session 也为空 在后面调用session 的方法就出异常
    }
    session = (sessionFactory != null) ? sessionFactory.openSession(): null;
    threadLocal.set(session);
    }        return session;
        }
      

  5.   


    package cn.hxex.exam.dao;
    import com.sql.Driver.*;
    import java.util.*;
    import cn.hxex.exam.model.*;
    import org.hibernate.HibernateException;
    import org.hibernate.Session;
    import org.hibernate.Transaction;
    import org.hibernate.cfg.Configuration;public class userDao {
    static Session session;
    public static User getUser(String Id){
    session=HibernateSessionFactory.getSession();
    return (User)session.createQuery("from User u where u.u_ID='"+Id+"'").uniqueResult();
    }

    public static List getAllUser(){
    session=HibernateSessionFactory.getSession();
    return session.createQuery("from User u ").list();
    }

    public static User getUserByName(String Name){
    session=HibernateSessionFactory.getSession();
    return (User)session.createQuery("from User u where u.name='"+Name+"'").uniqueResult();
    }

    public static void updateUser(User u){
    session=HibernateSessionFactory.getSession();
    Transaction tx=session.beginTransaction();
    session.update(u);
    tx.commit();
    session.close();
    }

    public static void addUser(User u){
    session=HibernateSessionFactory.getSession();
    Transaction tx=session.beginTransaction();
    session.save(u);
    tx.commit();
    session.close();
    }

    public static void removeUser(String Id){
    User u=getUser(Id);
    if(u!=null)
    {
    session=HibernateSessionFactory.getSession();
    Transaction tx=session.beginTransaction();
    session.delete(u);
    tx.commit();
    session.close();
    }
    }
    }
      

  6.   

    但是一旦在CFG中删除Paper.hbm.xml以及于其相关的关系后就没有问题了所以怀疑是HBM问题
      

  7.   

    cn.hxex.exam.dao.userDao.getUserByName(userDao.java:26) 
    这行有问题啊,你debug进去看看那个为null??
      

  8.   

    由于
    public static User getUserByName(String Name){
         session=HibernateSessionFactory.getSession();
         return (User)session.createQuery("from User u where u.name='"+Name+"'").uniqueResult();
    }
    要生成public static User getUserByName(String Name){
            session=HibernateSessionFactory.getSession();
            return (User)session.createQuery("from User u where u.name='"+Name+"'").uniqueResult();
        }
    而且会调用session.createQuery方法
    而session这时为空,就是这个原因
      

  9.   

    HibernateSessionFactory.getSession()
    那是这个为null了,仔细看看你的cfg文件吧
      

  10.   

    你debug到下面这行:
    Session session = (Session) threadLocal.get();
      看看 是不是threadLocal.get()为null?
      

  11.   

    public static Session getSession() throws HibernateException {
      
    这个方法里面debug一遍  看哪里有问题