как сохранить несколько строк данных, используя одну функцию весной - PullRequest
0 голосов
/ 12 декабря 2018

Мой контроллер выглядит так:

public ModelAndView postMethod(
        @ModelAttribute("attribute") ) throws Exception {
    ModelAndView mav = new ModelAndView("jsp");
    Date todayDate = new Date();
    Session session = null;
    Transaction transaction = null;
    if (issue_vendor.getOutward_item_code1() != null) {
        transaction = session.beginTransaction();
        session = sessionFactory.openSession();
        Query query = session.createQuery("FROM stock_register_dto where item_code=:code order by date desc");
        query.setInteger("code", issue_vendor.getOutward_item_code1());
        query.setMaxResults(1);
        List<stock_register_dto> list = query.list();
        System.out.println("result: " + list);
        for (stock_register_dto check : list) {
            Integer code1 = check.getItem_code();
            Integer stock1 = check.getStock();
            if (code1 == issue_vendor.getOutward_item_code1() && stock1 >= issue_vendor.getQuantity_issued1()) {
                this.master_service.saveRequirement(dto);
                session.flush();
                session.clear();
            }
        }
    }
    if (issue_vendor.getOutward_item_code2() != null) {

        transaction = session.beginTransaction();
        session = sessionFactory.openSession();
        Query query = session.createQuery("FROM stock_register_dto where item_code=:code order by date desc");
        query.setInteger("code", issue_vendor.getOutward_item_code2());
        query.setMaxResults(1);
        List<stock_register_dto> list = query.list();
        System.out.println("result: " + list);
        for (stock_register_dto check : list) {
            Integer code1 = check.getItem_code();
            Integer stock1 = check.getStock();
            if (code1 == issue_vendor.getOutward_item_code2() && stock1 >= issue_vendor.getQuantity_issued2()) {
                this.master_service.saveRequirement(dto);
                session.flush();
                session.clear();
            }
        }
    }
return mav;
}

Когда я использую этот контроллер, я получаю эту ошибку ..

HTTP Status 500 - Ошибка обработки запроса;вложенное исключение - java.lang.NullPointerException

тип Отчет об исключении

сообщение Ошибка обработки запроса;вложенное исключение - java.lang.NullPointerException

description Сервер обнаружил внутреннюю ошибку, которая не позволила ему выполнить этот запрос.

исключение

org.springframework.web.util.NestedServletException: обработка запроса не удалась;Вложенное исключение - java.lang.NullPointerException org.springframework.web.servlet.FrameworkServlet.processRequest (FrameworkServlet.java:982) org.springframework.web.servlet.FrameworkServlet.doPost (FrameworkServlet.j.j.v.let.let.jp).HttpServlet.service (HttpServlet.java:650) org.springframework.web.servlet.FrameworkServlet.service (FrameworkServlet.java:846) javax.servlet.http.HttpServlet.service (HttpServlet.jt.websocket.server.WsFilter.doFilter (WsFilter.java:52)

первопричина

java.lang.NullPointerException com.stock_issuance.controller.Stock_issuance_controller.saveStock4 (stock_issler.jpg).reflect.Java: 498) org.springframework.web.method.support.InvocableHandlerMethod.doInvoke (InvocableHandlerMethod.java:220) org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest (InvocableHandlerMethod.java:134) org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle (ServletInvocableHandlerMethod.java: 116) org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod (RequestMappingHandlerAdapter.java:827) org.springframework.web.servlet.mvc.metHand.jap738) org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle (AbstractHandlerMethodAdapter.java:85) org.springframework.web.servlet.DispatcherServlet.doDispatch (DispatcherSlet.rb. Orb.DispatcherServlet.doService (DispatcherServlet.java:897) org.springframework.web.servlet.FrameworkServlet.processRequest (FrameworkServlet.java:970) org.springframework.web.servlet.FrameworkServlet.doPost (FrameworkServlet.java:872) javax.servlet.http.HttpServlet.service (HttpServlet.java:650) org.springframework.web.servlet.FrameworkServlet.service (FrameworkServlet.serv.j.p.HttpServlet.service (HttpServlet.java:731) org.apache.tomcat.websocket.server.WsFilter.doFilter (WsFilter.java:52)

примечание Полная трассировка стека первопричины доступна в ApacheЖурнал Tomcat / 7.0.68.

1 Ответ

0 голосов
/ 12 декабря 2018

Вы можете использовать пакетную обработку hibernate, как показано ниже.

Установите свойство в файле конфигурации hibernate

hibernate.jdbc.batch_size 20

, а затем используйте, как показано ниже, код

Session session = sessionFactory.openSession();
Transaction transaction = session.beginTransaction();

for ( int i=0; i<100000; i++ ) {
    stock_register_dto dto = new stock_register_dto (....);
    session.save(dto);
    if ( i % 20 == 0 ) { //20, same as the JDBC batch size
        //flush a batch of inserts and release memory the memory
        session.flush();
        session.clear();
    }
}

transaction.commit();
session.close();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...