【问题标题】:NullPointerException in dao.save methoddao.save 方法中的 NullPointerException
【发布时间】:2018-07-10 21:17:02
【问题描述】:

我正在学习 Spring 框架并使用 DAO。当我使用我的 dao.save 方法将新对象持久保存到数据库时,我得到了 NullPointerException。我该如何解决这个问题并正确地将对象持久化/删除/更新到数据库?谢谢。

实体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*

CoffeeDAO:

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

【问题讨论】:

  • 根据您发布的代码,您似乎希望将 CoffeeDAO 接口的实现注入OrderBean。您是否可能需要在CoffeeImplementation 中添加适当的注释,例如@Repository,例如:@Repository("coffeeDAO")。这将允许您的 DI 容器(Spring?)自动连接 coffeeDAO。
  • 我像 @Repository("coffeeDAO") public class CoffeeImplementation implements CoffeeDAO 这样添加这个注释,但它没有帮助。还是一样的 NullPointerException 错误。
  • 如果您可以添加所有代码,将会很有帮助。但是,还有一件事要尝试:在 @Autowired 注释之前或之后添加注释 @Qualifier("coffeeDAO")。这明确地告诉您的容器(Spring)用于执行自动装配的 bean 的名称。此外,Spring 必须知道包含注释 bean 的包(OrderBeanCoffeeImplementation),并允许 Spring 将 bean 加载到 DI 容器中。见:docs.spring.io/spring/docs/current/javadoc-api/org/…

标签: java hibernate dao


【解决方案1】:

用我的托管 bean 中的SpringBeanAutowiringSupport 解决我的问题:public class OrderBean extends SpringBeanAutowiringSupport

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-05
    • 2013-02-18
    • 1970-01-01
    • 1970-01-01
    • 2012-07-30
    • 1970-01-01
    相关资源
    最近更新 更多