NullPointerException в методе dao.save

Я изучаю Spring framework и использую 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);

}

КофеDAOImpl:

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. Возможно ли, что вам нужно добавить соответствующую аннотацию, например @Repository, к CoffeeImplementation, например: @Repository("coffeeDAO"). Это позволит вашему контейнеру DI (Spring?) Автоматически подключать coffeeDAO.

StvnBrkdll 10.07.2018 23:46

Я добавляю эту аннотацию как @Repository("coffeeDAO") public class CoffeeImplementation implements CoffeeDAO, но это не помогает. Все та же ошибка NullPointerException.

SislaOpir 11.07.2018 00:12

Было бы полезно, если бы вы могли добавить весь свой код. Однако можно попробовать еще одну вещь: добавьте аннотацию @Qualifier("coffeeDAO") непосредственно перед или после вашей аннотации @Autowired. Это явно сообщает вашему контейнеру (Spring) имя bean-компонента, который будет использоваться для автоматического подключения. Кроме того, Spring должен знать пакет, содержащий ваши аннотированные bean-компоненты (OrderBean и CoffeeImplementation), и позволяет Spring загружать bean-компоненты в контейнер DI. см .: docs.spring.io/spring/docs/current/javadoc-api/org/…

StvnBrkdll 11.07.2018 16:45
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
3
630
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Решите мою проблему с SpringBeanAutowiringSupport в моем управляемом компоненте: public class OrderBean extends SpringBeanAutowiringSupport.

Другие вопросы по теме