NullPointerException в session hibernate

447
21 ноября 2017, 21:35

Добрый день!

Имеется метод в контроллере:

    @RequestMapping(value = "/employees/{companyId}/add", method = RequestMethod.POST)
public String addEmployee(@RequestParam("currentId") int currentId,
                          @PathVariable(value = "companyId") int companyId,
                          @ModelAttribute("employee")Employee employee){
    if (employee.getId() == 0){
        this.employeeService.addEmployee(currentId, employee);
    } else {
        this.employeeService.updateEmployee(employee);
    }
    return "redirect:/employees/" + companyId;
}

Метод в EmployeeDaoImpl:

    @Override
public void addEmployee(int companyId, Employee employee) {
    Session session = this.sessionFactory.getCurrentSession();
    Company newCompany = companyDao.getCompanyById(companyId);
    employee.setCompany(newCompany);
    session.persist(employee);
    logger.info("Employee saved:" + employee);
}

И метод в CompanyDaoImpl:

    @Override
public Company getCompanyById(int id) {
    Session session = this.getSessionFactory().getCurrentSession();
    Company company = (Company) session.load(Company.class, new Integer(id));
    logger.info("Company loaded" + company);
    return company;
}

При попытке использовать метод addEmployee выходит ошибка в строке Session session = this.getSessionFactory().getCurrentSession() метода CompanyDaoImpl

exception
org.springframework.web.util.NestedServletException: Request processing failed; nested exception is java.lang.NullPointerException
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:973)
org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:863)
javax.servlet.http.HttpServlet.service(HttpServlet.java:648)
org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:837)
javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
root cause
java.lang.NullPointerException
org.probation.dao.CompanyDaoImpl.getCompanyById(CompanyDaoImpl.java:49)
org.probation.dao.EmployeeDaoImpl.addEmployee(EmployeeDaoImpl.java:30)
org.probation.service.EmployeeServiceImpl.addEmployee(EmployeeServiceImpl.java:22)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
java.lang.reflect.Method.invoke(Method.java:498)
org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:317)
org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:190)
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157)
org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:98)
org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:262)
org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:95)
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:207)
com.sun.proxy.$Proxy31.addEmployee(Unknown Source)
org.probation.controller.EmployeeController.addEmployee(EmployeeController.java:40)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
java.lang.reflect.Method.invoke(Method.java:498)
org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:215)
org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:132)
org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:104)
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:749)
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:689)
org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:83)
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:938)
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:870)
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:961)
org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:863)
javax.servlet.http.HttpServlet.service(HttpServlet.java:648)
org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:837)
javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

CompanyDaoImpl.java

@Repository
public class CompanyDaoImpl implements CompanyDao {
private static final Logger logger = LoggerFactory.getLogger(CompanyDaoImpl.class);
private SessionFactory sessionFactory;
public void setSessionFactory(SessionFactory sessionFactory) {
    this.sessionFactory = sessionFactory;
}
public SessionFactory getSessionFactory() {
    return sessionFactory;
}
@Override
public void addCompany(Company company) {
    Session session = this.sessionFactory.getCurrentSession();
    session.persist(company);
    logger.info("Company saved:" + company);
}
@Override
public void removeCompany(int id) {
    Session session = this.sessionFactory.getCurrentSession();
    Company company = (Company)session.load(Company.class, new Integer(id));
    if (company != null){
        session.delete(company);
    }
    logger.info("Company deleted" + company);
}
@Override
public Company getCompanyById(int id) {
    Session session = this.getSessionFactory().getCurrentSession();
    Company company = (Company) session.load(Company.class, new Integer(id));
    logger.info("Company loaded" + company);
    return company;
}
@Override
@SuppressWarnings("unchecked")
public List<Company> companyList() {
    Session session = this.sessionFactory.getCurrentSession();
    List<Company> companyList = session.createQuery("from Company").list();
    for(Company company: companyList){
        logger.info("Company list: " + company);
    }
    return companyList;
}
@Override
public void updateCompany(Company company) {
    Session session = this.sessionFactory.getCurrentSession();
    session.update(company);
    logger.info("Company update" + company);
}
}

Часть mvc-dispatcher-servlet.xml

    <!--CompanyDao and CompanyService beans-->
<bean id="companyDao" class="org.probation.dao.CompanyDaoImpl">
    <property name="sessionFactory" ref="hibernate4AnnotatedSessionFactory"/>
</bean>
<bean id="companyService" class="org.probation.service.CompanyServiceImpl">
    <property name="companyDao" ref="companyDao"/>
</bean>
<!--EmployeeDao and EmployeeService beans-->
<bean id="employeeDao" class="org.probation.dao.EmployeeDaoImpl">
    <property name="sessionFactory" ref="hibernate4AnnotatedSessionFactory"/>
</bean>
<bean id="employeeService" class="org.probation.service.EmployeeServiceImpl">
    <property name="employeeDao" ref="employeeDao"/>
</bean>

<context:component-scan base-package="org.probation"/>
<tx:annotation-driven transaction-manager="transactionManager"/>
<bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
    <property name="sessionFactory" ref="hibernate4AnnotatedSessionFactory"/>
</bean>
Answer 1

Здравствуйте, возможно, стоит попробовать так:

@Autowired
public CompanyDaoImpl(SessionFactory sessionFactory) {
    this.sessionFactory = sessionFactory;
}
READ ALSO
Object или параметризация?

Object или параметризация?

Когда мы пишем класс, но не знаем с какими объектами будем работать (допустим храниить переменную) мы можем просто задать переменную типа...

413
Гироскоп акселерометр android

Гироскоп акселерометр android

У меня есть webview,который открывает сайт с WebGl или CCS3DНа данном сайте есть кнопка,которая включает гироскоп

232
Как сделать подобное меню?

Как сделать подобное меню?

При добавлении bottom navigation view получается такое меню

274
Какой Property отвечает за наведение на кнопку

Какой Property отвечает за наведение на кнопку

хочу чтобы когда на Button JavaFX наводился курсор, он подсвечиваласьКак это сделать? Не нашел подходящего Property

290