dao.save 方法中的 NullPointerException
NullPointerException in dao.save method
我正在学习 Spring 框架并使用 DAO。当我使用 dao.save 方法将新对象保存到数据库时,我得到了 NullPointerException。我怎样才能解决这个问题并正确地 persist/delete/update 对象到数据库?谢谢。
实体Coffee.class:
@Entity
public class Coffee {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String coffeeName;
private Integer costForCup;
private boolean isDisabled;
@OneToMany(mappedBy = "coffee")
private Set<Coffee> coffee;
public Coffee() {}
public Coffee(String coffeeName, Integer costForCup, boolean isDisabled) {
this.coffeeName = coffeeName;
this.costForCup = costForCup;
this.isDisabled = isDisabled;
}
*getters and setters*
咖啡道:
public interface CoffeeDAO {
public Coffee findById(Long id);
public List<Coffee> findAll();
public void createCoffee(Coffee coffee);
}
CoffeeDAOImpl :
public class CoffeeImplementation implements CoffeeDAO {
private HibernateTemplate hibernateTemplate;
public void setSessionFactory(SessionFactory sessionFactory){
this.hibernateTemplate = new HibernateTemplate(sessionFactory);
}
***
@Override
@Transactional
public void createCoffee(Coffee coffee) {
hibernateTemplate.save(coffee);
}
}
OrderBean.class :
@ManagedBean
@SessionScoped
public class OrderBean {
@Autowired
private CoffeeDAO coffeeDAO;
public boolean createCoffee(){
Coffee coffee = new Coffee("Кофе", 4, true);
System.out.println(coffee.getCoffeeName()+" " + coffee.getCostForCup() + " " + coffee.isDisabled());
coffeeDAO.createCoffee(coffee);
return true;
}
错误日志:
Caused by: javax.faces.el.EvaluationException: java.lang.NullPointerException
at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:101)
at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)
... 32 more
Caused by: java.lang.NullPointerException
at javacoff.beans.OrderBean.createCoffee(OrderBean.java:88)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.jboss.el.util.ReflectionUtil.invokeMethod(ReflectionUtil.java:329)
at org.jboss.el.util.ReflectionUtil.invokeMethod(ReflectionUtil.java:342)
at org.jboss.el.parser.AstPropertySuffix.invoke(AstPropertySuffix.java:58)
at org.jboss.el.parser.AstValue.invoke(AstValue.java:96)
at org.jboss.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:276)
at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105)
at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:87)
... 33 more
在我的托管 bean 中使用 SpringBeanAutowiringSupport
解决我的问题:public class OrderBean extends SpringBeanAutowiringSupport
。
我正在学习 Spring 框架并使用 DAO。当我使用 dao.save 方法将新对象保存到数据库时,我得到了 NullPointerException。我怎样才能解决这个问题并正确地 persist/delete/update 对象到数据库?谢谢。
实体Coffee.class:
@Entity
public class Coffee {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String coffeeName;
private Integer costForCup;
private boolean isDisabled;
@OneToMany(mappedBy = "coffee")
private Set<Coffee> coffee;
public Coffee() {}
public Coffee(String coffeeName, Integer costForCup, boolean isDisabled) {
this.coffeeName = coffeeName;
this.costForCup = costForCup;
this.isDisabled = isDisabled;
}
*getters and setters*
咖啡道:
public interface CoffeeDAO {
public Coffee findById(Long id);
public List<Coffee> findAll();
public void createCoffee(Coffee coffee);
}
CoffeeDAOImpl :
public class CoffeeImplementation implements CoffeeDAO {
private HibernateTemplate hibernateTemplate;
public void setSessionFactory(SessionFactory sessionFactory){
this.hibernateTemplate = new HibernateTemplate(sessionFactory);
}
***
@Override
@Transactional
public void createCoffee(Coffee coffee) {
hibernateTemplate.save(coffee);
}
}
OrderBean.class :
@ManagedBean
@SessionScoped
public class OrderBean {
@Autowired
private CoffeeDAO coffeeDAO;
public boolean createCoffee(){
Coffee coffee = new Coffee("Кофе", 4, true);
System.out.println(coffee.getCoffeeName()+" " + coffee.getCostForCup() + " " + coffee.isDisabled());
coffeeDAO.createCoffee(coffee);
return true;
}
错误日志:
Caused by: javax.faces.el.EvaluationException: java.lang.NullPointerException
at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:101)
at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)
... 32 more
Caused by: java.lang.NullPointerException
at javacoff.beans.OrderBean.createCoffee(OrderBean.java:88)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.jboss.el.util.ReflectionUtil.invokeMethod(ReflectionUtil.java:329)
at org.jboss.el.util.ReflectionUtil.invokeMethod(ReflectionUtil.java:342)
at org.jboss.el.parser.AstPropertySuffix.invoke(AstPropertySuffix.java:58)
at org.jboss.el.parser.AstValue.invoke(AstValue.java:96)
at org.jboss.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:276)
at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105)
at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:87)
... 33 more
在我的托管 bean 中使用 SpringBeanAutowiringSupport
解决我的问题:public class OrderBean extends SpringBeanAutowiringSupport
。