在getSession()保存(实体)时获取java.lang.NullPointerException;

在getSession()保存(实体)时获取java.lang.NullPointerException;,java,hibernate,spring-mvc,nullpointerexception,Java,Hibernate,Spring Mvc,Nullpointerexception,我想添加对象数据并想保存在DB表中,一切正常,但它给了我一个错误: java.lang.NullPointerException 联机getSession().save(实体) 我在代码中调用了此方法: @Service public class AddCategoryProcessor implements ICommandProcessor<AddCategory> { @Autowired private IPatronCategoryRepository p

我想添加对象数据并想保存在DB表中,一切正常,但它给了我一个错误:

java.lang.NullPointerException

联机
getSession().save(实体)

我在代码中调用了此方法:

@Service
public class AddCategoryProcessor implements ICommandProcessor<AddCategory> {

    @Autowired
    private IPatronCategoryRepository patronCategoryRepository = new PatronCategoryRepository();

    @Override
    @Transactional(propagation = Propagation.REQUIRED)
    public void Process(AddCategory command){        
        PatronCategory entity = new PatronCategory();
        entity.setCategoryName(command.getCategoryName());
        try
        {
            patronCategoryRepository.save(entity);
        }catch (Exception e){
            e.printStackTrace();
        }
    }
}
以下是sessionFactory声明:

protected SessionFactory sessionFactory;
猜猜为什么是NULLPOINTEREXCEPTION

更新:

java.lang.NullPointerException
    at com.ngl.commandprocessors.patroncategoryprocessor.AddCategoryProcessor.Process(AddCategoryProcessor.java:32)
    at com.ngl.commandprocessors.patroncategoryprocessor.AddCategoryProcessor.Process(AddCategoryProcessor.java:16)
    at com.ngl.controllerapis.BaseApiController.ProcessRequest(BaseApiController.java:29)
    at com.ngl.controllerapis.PatronCategoryController.addCategory(PatronCategoryController.java:39)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:219)
    at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:132)
    at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:104)
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:746)
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:687)
    at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:80)
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:925)
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:856)
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:915)
    at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:822)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:646)
    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:796)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1040)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607)
    at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.doRun(AprEndpoint.java:2441)
    at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:2430)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:744)

您的配置有点不完整。您应该将会话管理完全委托给Spring

在spring xml文件中添加:

<bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate">
    <property name="sessionFactory" ref="sessionFactory" />
</bean>
在AddCategoryProcessor中,保留存储库的定义如下:

@Autowired
private IPatronCategoryRepository patronCategoryRepository;
@Autowired
private IPatronCategoryRepository patronCategoryRepository; 
最后是你的方法:

@Override
@Transactional(propagation = Propagation.REQUIRED)
public void Process(AddCategory command){        
    PatronCategory entity = new PatronCategory();
    entity.setCategoryName(command.getCategoryName());
    try
    {
        getHibernateTemplate.save(entity);
    }catch (Exception e){
        e.printStackTrace();
    }
}

如果您仍然需要直接访问SessionFactory,那么您唯一需要做的就是将其注入到PatronCategoryRepository中:

@Repository
public class PatronCategoryRepository implements IPatronCategoryRepository{

    @Autowired
    protected SessionFactory sessionFactory;


    public PatronCategoryRepository() {
    }

    public PatronCategory save(PatronCategory entity){
        return getSession().save(entity);
    }

    private Session getSession() {
       return sessionFactory.getCurrentSession();
    }
}
记住从AddCategoryProcessor中删除新子句,如下所示:

@Autowired
private IPatronCategoryRepository patronCategoryRepository;
@Autowired
private IPatronCategoryRepository patronCategoryRepository; 
Employee.java
包com.javacodegeks.snippets.enterprise.model;
导入java.io.Serializable;
导入javax.persistence.Column;
导入javax.persistence.Entity;
导入javax.persistence.Id;
导入javax.persistence.Table;
@实体
@表(name=“Employee1”)
公共类Employee实现了可序列化{
@身份证
@列(name=“ID”)
私有int-id;
@列(name=“name”)
私有字符串名称;
@列(name=“AGE”)
私人互联网;
公职人员(){
}
公共int getId(){
返回id;
}
公共无效集合id(内部id){
this.id=id;
}
公共字符串getName(){
返回名称;
}
公共void集合名(字符串名){
this.name=名称;
}
公共长假{
回归年龄;
}
公共无效设置(整数){
这个。年龄=年龄;
}
}
EmployeeDao.java
包com.javacodegeks.snippets.enterprise.dao;
导入com.javacodegeks.snippets.enterprise.model.Employee;
公共界面EmployeeDAO{
公共作废保存员工(员工员工);
员工findEmployeeById(内部id);
作废更新员工(员工);
作废删除员工(员工);
}
EmployeeDaoImpl.java
包com.javacodegeks.snippets.enterprise.dao;
导入java.io.Serializable;
导入org.hibernate.SessionException;
导入org.hibernate.SessionFactory;
导入org.springframework.beans.factory.annotation.Autowired;
导入org.springframework.stereotype.Repository;
导入org.springframework.orm.hibernate3.HibernateTemplate;
导入com.javacodegeks.snippets.enterprise.model.Employee;
公共类EmployeeDAOImpl实现EmployeeDAO{
私有HibernateTemplate模板;
私人会话工厂会话工厂;
@自动连线
公共void setTemplate(HibernateTemplate模板){
this.template=模板;
//模板.setSessionFactory(sessionFactory);
}
public void setSessionFactory(SessionFactory SessionFactory){
新HibernateTemplate(sessionFactory);
}
/*
*公共作废保存员工(员工员工){
*sessionFactory.getCurrentSession().save(员工);
* 
* }
*/
公共雇员findEmployeeById(内部id){
return(Employee)sessionFactory.getCurrentSession().get(
Employee.class,id);
}
public void updateEmployee(员工){
sessionFactory.getCurrentSession().update(员工);
}
公共作废删除员工(员工){
sessionFactory.getCurrentSession().delete(员工);
}
公共作废保存员工(员工员工){
sessionFactory.getCurrentSession().persist(员工);
模板。保存或更新(员工);
}
}
Application COntext.xml
com.javacodegeeks.snippets.enterprise.model.Employee
org.hibernate.dialogue.mysqldialogue
真的
请帮助我:-)

为什么@Autowired private IPatronCategoryRepository赞助人CategoryRepository=新赞助人CategoryRepository();是否创建了新对象?有关StackOverflow的问题可能会对您有所帮助,例如:因为
getSessionFactory()
是否为
null
?VinayVeluri-是的,我删除了@Autowired,但仍然给了我相同的错误。在服务类级别添加@Transactional当我在
用户类别报告中编写保存方法时,它给了我与
公共无效保存(最终T实体)的冲突错误
位于
存储库
类中。您已经创建了从未调用过的
主顾类别Repository()
构造函数。无需调用构造函数,bean应该在春季定义xmlOK谢谢先生给我时间,并高兴地通知您,我已经用另一种方法解决了它。我正在一个
Factory
文件中创建
AddCategoryProcessor
的新实例并返回新对象,然后我对其进行了修改,使其
autowire
并返回该对象,因此问题现在已解决,我可以继续我的工作,但感谢您给我的帮助和建议。很高兴和你谈话。。
@Autowired
private IPatronCategoryRepository patronCategoryRepository; 
<bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate">
    <property name="sessionFactory" ref="sessionFactory" />
</bean>
    <bean id="txManager"
          class="org.springframework.orm.hibernate3.HibernateTransactionManager">
        <property name="sessionFactory" ref="sessionFactory" />
    </bean>

    <tx:annotation-driven transaction-manager="txManager" />
@Autowired
protected SessionFactory sessionFactory;
Employee.java

package com.javacodegeeks.snippets.enterprise.model;

import java.io.Serializable;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name = "Employee1")
public class Employee implements Serializable {

    @Id
    @Column(name = "ID")
    private int id;

    @Column(name = "NAME")
    private String name;

    @Column(name = "AGE")
    private int age;

    public Employee() {
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public long getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

}

EmployeeDao.java

package com.javacodegeeks.snippets.enterprise.dao;

import com.javacodegeeks.snippets.enterprise.model.Employee;

public interface EmployeeDAO {

          public void saveEmployee(Employee employee);

          Employee findEmployeeById(int id);

          void updateEmployee(Employee employee);

          void deleteEmployee(Employee employee);

}


EmployeeDaoImpl.java

package com.javacodegeeks.snippets.enterprise.dao;

import java.io.Serializable;

import org.hibernate.SessionException;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import org.springframework.orm.hibernate3.HibernateTemplate;

import com.javacodegeeks.snippets.enterprise.model.Employee;

public class EmployeeDAOImpl implements EmployeeDAO {
    private HibernateTemplate template;

    private SessionFactory sessionFactory;

    @Autowired
    public void setTemplate(HibernateTemplate template) {

        this.template = template;
        // template.setSessionFactory(sessionFactory);

    }

    public void setSessionFactory(SessionFactory sessionFactory) {
        new HibernateTemplate(sessionFactory);
    }

    /*
     * public void saveEmployee(Employee employee) {
     * sessionFactory.getCurrentSession().save(employee);
     * 
     * }
     */

    public Employee findEmployeeById(int id) {
        return (Employee) sessionFactory.getCurrentSession().get(
                Employee.class, id);
    }

    public void updateEmployee(Employee employee) {
        sessionFactory.getCurrentSession().update(employee);

    }

    public void deleteEmployee(Employee employee) {
        sessionFactory.getCurrentSession().delete(employee);

    }

    public void saveEmployee(Employee employee) {

        sessionFactory.getCurrentSession().persist(employee);
        template.saveOrUpdate(employee);

    }
}


Application COntext.xml

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
    xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context"
    xmlns:jee="http://www.springframework.org/schema/jee" xmlns:tx="http://www.springframework.org/schema/tx"
    xmlns:task="http://www.springframework.org/schema/task"
    xsi:schemaLocation="http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.2.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.2.xsd">

  <context:component-scan base-package="com.javacodegeeks.snippets.enterprise.*" />

 <!--  <tx:annotation-driven/> -->

 <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
    <property name="driverClassName" value="com.mysql.jdbc.Driver" />
    <property name="url" value="jdbc:mysql://localhost:3306/test" />
    <property name="username" value="root" />
    <property name="password" value="root" />
  </bean>

  <bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
    <property name="dataSource" ref="dataSource"/>
     <property name="annotatedClasses">  
        <list>  
        <value>com.javacodegeeks.snippets.enterprise.model.Employee</value>  
        </list>  
        </property> 

      <!-- <property name="mappingResources">  
        <list>  
        <value>Employee.hbm.xml</value>  
        </list>  
        </property>  -->


    <property name="hibernateProperties">
      <props>
        <prop 
         key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
        <prop key="hibernate.show_sql">true</prop>
      </props>
    </property>

  </bean>

  <!-- <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
    <property name="sessionFactory" ref="sessionFactory" />
</bean> -->
  <bean id="template" class="org.springframework.orm.hibernate3.HibernateTemplate">  
    <property name="sessionFactory" ref="sessionFactory"></property>  
    </bean> 
   <bean id="d" class="com.javacodegeeks.snippets.enterprise.dao.EmployeeDAOImpl">  
    <property name="template" ref="template"></property>  
    </bean>  
</beans>


pleas ehelp me :-)