Почему я не могу сделать операции над таблицей базы данных? (все еще получает исключение NullPointerException) - PullRequest
0 голосов
/ 31 октября 2019

У меня проблема с сохранением (вставкой) записи в таблицу базы данных (PL / SQL) с использованием JPA.

Вот мой класс модели:

@Entity
@Table(name = "QOP_DROOLS_APP")
public class QopDroolAppModel {

        @Id //primary key
        @Column(name = "DROOL_ID")
        private Long droolId;

        @Column(name = "DROOL_NAME")
        private String droolName;

        @Column(name = "DROOL_HUMAN_NAME")
        private String droolHumanName;

        @Column(name = "DROOL_BODY")
        private String droolBody;

        @Column(name = "DROOL_DESCRIPTION")
        private String droolDescription;
}

Класс репо

@Repository
public interface QopDroolAppRepo extends JpaRepository<QopDroolAppModel, Long> {}

Класс DAO

public class QopDroolAppDAO {

    @Autowired(required = true)
    private QopDroolAppRepo repo;

    @Autowired(required = true) 
    public void saveDataInTable(String ruleName, String ruleBody, String description)
    {
        QopDroolAppModel m1 = new QopDroolAppModel();
        long generatedLong = new Random().nextInt(100);
        m1.setDroolId(generatedLong);
        m1.setDroolName(ruleName);
        m1.setDroolHumanName(ruleName);
        m1.setDroolBody(ruleBody);
        m1.setDroolDescription(description);

        this.repo.save(m1);
    }
}

Я пробовал все, но все ещетакая же ошибка.

ОШИБКА oaccC [. [. [. [DispatcherServlet] - Servlet.service () для сервлета [dispatcherServlet] в контексте с путем [] вызвала исключение [Ошибка обработки запроса;вложенное исключение - java.lang.NullPointerException] с первопричиной java.lang.NullPointerException: null

UPDATE - здесь находится трассировка стека

2019-11-04 08:22:28 ERROR o.a.c.c.C.[.[.[.[dispatcherServlet] - Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is java.lang.NullPointerException] with root cause
java.lang.NullPointerException: null
    at com.droolsWorkbench.services.QopDroolAppDAO.saveDataInTable(QopDroolAppDAO.java:33)
    at com.droolsWorkbench.controller.NewRuleController.DroolsRuleGenerator(NewRuleController.java:213)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:209)
    at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:136)
    at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:102)
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:870)
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:776)
    at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:991)
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:925)
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:978)
    at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:881)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:661)
    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:855)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:742)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.springframework.web.filter.HttpPutFormContentFilter.doFilterInternal(HttpPutFormContentFilter.java:109)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:81)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:200)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:496)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342)
    at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:803)
    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:790)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1459)
    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Unknown Source)

Ответы [ 2 ]

0 голосов
/ 31 октября 2019

Работаете ли вы с классом QopDroolAppDAO из весеннего сервиса / компонента / приложения? если вы этого не сделаете, то Spring не будет автоматически подключать ваш репозиторий, что, как мне кажется, вызывает проблему с нулевым указателем (репозиторий имеет значение null, и когда вы вызываете .save, который вызывает исключение

Обычно вам нужно установитькласс / служба в виде бина, например, так:

@Component // or @Service / @Controller depending on your application
public class QopDroolAppDAO {

Обходной путь, если вы не хотите делать свой класс пружинным бином, состоит в том, чтобы зависимость добавляла ваш репозиторий следующим образом:

public class QopDroolAppDAO {
    private final QopDroolAppRepo repo;

    public QopDroolAppDAO(QopDroolAppRepo repo) {
        this.repo = repo
    }

Использованиедля этого вы можете создать репо из класса Spring Bean (службы, компонента контроллера и т. д.)

Также я бы рекомендовал не подключать ваш репозиторий так, как вы это делали, лучше всего внедрять бины через конструктор, какитак:

@Component // or service etc
public class QopDroolAppDAO {
    private final QopDroolAppRepo repo;

    @Autowired
    public QopDroolAppDAO(QopDroolAppRepo repo) {
        this.repo = repo
    }

подробнее об этом здесь

0 голосов
/ 31 октября 2019

Аннотируйте ваш класс DAO с помощью некоторой аннотации стереотипа Spring, например, @Component, поэтому - если все настроено правильно - Spring может найти этот класс, создать его экземпляр и установить зависимые объекты при запуске приложения (сканирование компонентов).

@Component
public class QopDroolAppDAO {

    @Autowired(required = true)
    private QopDroolAppRepo repo;

    public void saveDataInTable(String ruleName, String ruleBody, String description)
    {
        QopDroolAppModel m1 = new QopDroolAppModel();
        long generatedLong = new Random().nextInt(100);
        m1.setDroolId(generatedLong);
        m1.setDroolName(ruleName);
        m1.setDroolHumanName(ruleName);
        m1.setDroolBody(ruleBody);
        m1.setDroolDescription(description);
        this.repo.save(m1);
    }
}
...