Null Pointer Exception
出现在哪一行?你定位了吗?

解决方案 »

  1.   

    请把映射的xml文件贴出来把。
      

  2.   

    第一个nullpointer是category.getProducts().add(product);你new了一个Category 对象,如果在初始化的时候未对products赋值或赋空值的话,那category.getProducts()取出的是空。后面的不要我说了吧?后面的那个看不出来什么错。楼主,不好意思了。
      

  3.   

    还有,对于一对多的关系,在子表数据未保存的时候而去保存主表(set里有未保存的子表对象),应该会出错的(未保存的持久对象异常)。楼主第二种方法值得商榷
      

  4.   

    谢谢大家,我无意间看到一个blog,讨论了上述问题,它给出两种方法,一种就是我的第二种,他也说了不知为什末不行,我的第一种方法其实是在www.hibernate.org.cn学的,(初级文章,one-to-many),而且我的第二种方法是hibernate文档所给出的方法,如下:
    Cat cat = new DomesticCat();
    Cat kitten = new DomesticCat();
    ....
    Set kittens = new HashSet();
    kittens.add(kitten);
    cat.setKittens(kittens);
    session.save(cat);
    kittens = cat.getKittens(); //Okay, kittens collection is a Set怎末可能会出错呢
    它给出的第二种方法是:
    Session s=HibernateUtil.currentSession();
    Traction t=new Traction();Category category=new Category();
    category.setName("a");s.save(category);Product product=new Product();
    product.setName(b);
    product.setCategory(c);s.save(product);t.commit();
    s.close();象这样做是可以的,但我觉得hibernate文档所提供的方法最能体现hibernate的优势,也是最符合逻辑的,我自己没看材料直接想就是这样想的还有,我的映射文件与类是用middlegen与hibernate-extention自动生成的,我不知道为什末在生成的xml文件里,有insert=false出现,所以用这种方法要更改这一项(也许是我的具体数据库的关系)                            
                                   
        
                                
                        
                            
                      
                                                                   
      

  5.   

    Session s=HibernateUtil.currentSession();
    Traction t=new Traction();//老兄看过HIBERNATE文档吗?这里的traction怎么能NEW 一个,正确的因该为。Traction t = s.beginTransaction();
    Category category=new Category();
    category.setName("a");Product product=new Product();
    product.setName(b);category.getProducts().add(product);
    s.save(category);t.commit();
    s.close();给你一个正确的吧! Session s=HibernateUtil.currentSession();
    Transaction tx = null;
    try{
    tx = s.beginTransaction();
    s.save(userInfo);
    s.flush();
    tx.commit();
    }catch(HibernateException e){
    if (tx != null){
    tx.rollback();
    }
    throw e;
    }finally{
    s.close();
    }
    return userInfo;
    }