情况是这样 有个类是Car 里面有一个Set<Book> book 的属性 现在 想通过Id保存一个book 我写的代码如下:
public String execute() throws Exception{
Book book=this.serviceDao.findBookById(this.book.getId());
this.serviceDao.saveBookToCar(book);
return SUCCESS;
}public void saveBookToCar(Book book){
 this.car.getBook().add(book);
 this.getHibernateTemplate().saveOrUpdate(this.car);
}
但是不好使

解决方案 »

  1.   

    java.lang.NullPointerException
    Impl.CarDaoImpl.saveBookToCar(CarDaoImpl.java:21)
    ServiceImpl.ServiceDaoImpl.saveBookToCar(ServiceDaoImpl.java:92)
    action.SaveBookToCarAction.execute(SaveBookToCarAction.java:35)
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    java.lang.reflect.Method.invoke(Method.java:597)
    com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:441)
    com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:280)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:243)
    com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:165)
    com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
    com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:252)
    org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68)第21行 就是
    this.car.getBook().add(book);
     this.getHibernateTemplate().saveOrUpdate(this.car);
      

  2.   

    这样说 如果 有个类是Car 里面有一个Set<Book> book 的属性 现在 想往里面通过保存一个book 代码应该是什么 
      

  3.   

    首先代码的设计就有问题。所有的数据库操作都应该通过DAO接口去设计,DAOIMPL去实现。
    然后你检查下你的SPRING配置文件。里面应该没有配置car这个属性。即在你的CAR类里,你要再配一个CAR car;这样才可以。
    正确的做法如下:把ServiceDao设计成一个接口,或者你偷懒直接做成实现类也可以!在另一个文件里。不要通通放到那个CAR类里。
    然后配置。
    好吧。如果你非要那么做。你断点调试会不会?看哪个变量是空指针不就行了。我估计是你的那行this.car.getBook() 
    你car都没有new?! 这可以?你没用spring吧?
      

  4.   

    空指针异常,加个断点调试一下看看,看book里有没有全部获取到值。
    在开发中,调试是很重要的,能很快帮你找到问题。