省略了其它不重要的代码,其它代码和hibernate等等配置文件全部正确,
以下写法省略了导入包等,只给出主要代码public final class HibernateUtil {
   private static SessionFactory sf;
   public static SessionFactory getSf() {
return sf;
}
private HibernateUtil(){
   
   }
   static {
   Configuration cfg=new Configuration();
   cfg.configure();
   SessionFactory sf=cfg.buildSessionFactory();
   }
 
  public static Session getSession(){
  return getSf().openSession();
  }
}
测试类public static void main(String[] args) {

User u=new User();u.setName("zhouxiao");
adduser(u);
     }
static void adduser(User u){
       Session s=null;
       Transaction ts=null;
      
    try{
     s=HibernateUtil.getSession();
     
 ts=s.beginTransaction();
 
 s.save(u);

 ts.commit();
    }catch(HibernateException e){
     throw e;
    }finally{
     if(s!=null){
     s.close();
     }
    }
}}
运行这个测试类出现错误,好像是 nullpoint之类的错误,
但是如果测试类的主要方法改成:
Configuration cfg=new Configuration();
cfg.configure();
SessionFactory sf=cfg.buildSessionFactory();Sessin s=sf.openSession();
     
Transaction ts=s.beginTransaction(); User u=new User();u.setName("..");
 
  s.save(u);

 ts.commit();s.close();
其实总结地说:就是如果是用测试方法,自己的Configuration创建的Session,就能成功,
如果使用 HibernateUtil产生的Session,就提示空指针异常....但是我的语法,完全不可能错啊,我好歹也学java几年了,现在只是复习一下几年前学的东西....

解决方案 »

  1.   

    你的static加载顺序能保证吗?getSf()在static块里,这个sf还没加载到呢
      

  2.   

    拿掉那个static块里的SessionFactory
    static {
    ....
      sf=cfg.buildSessionFactory();
    ...
      } 试试看
      

  3.   

    看看这一段行不行
    public class HibernateUtils { private static SessionFactory factory; static {
    try {
    Configuration cfg = new Configuration().configure();
    factory = cfg.buildSessionFactory();
    } catch (Exception e) {
    e.printStackTrace();
    }
    } public static SessionFactory getSessionFactory() {
    return factory;
    } public static Session getSession() {
    return factory.openSession();
    } public static void closeSession(Session session) {
    if (session != null) {
    if (session.isOpen()) {
    session.close();
    }
    }
    }
    }hibernate.cfg.xml要在src根下才能加载
      

  4.   

    你是使用MyEclipse 自动生成的吗?
      

  5.   

    如果是就在要修改一点save()方法里的内容了
      

  6.   

        不是啊,
    谢谢各位。 答案在三楼!对的。  是static块中 ,去掉 SessionFactory 这个定义,
      直接是sf=cfg.buildSessionFactory();