Spring 和 PostgreSQL 抛出 java.lang.NullPointerException

标签 spring postgresql hibernate spring-boot

我正在使用 Spring、Hibernate 和 PostgreSQL。我想将对象保存在来自 jsp 页面的数据库中。但它会抛出 NullPointerException。我使用序列生成器进行自动递增,并在 PostgreSQL 中创建了一个名为 emp_id_seq 的序列。我打印发现问题的对象,它显示

员工 [id=null, firstName=vara, lastName=raj, address=abc, dob=Tue Jun 13 00:00:00 IST 2017, nic=154184125V, email=abc@xyz.com, companyId =1, departmentId=4]

错误

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is java.lang.NullPointerException
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:982)
    org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:872)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:661)
    org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:742)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
Root Cause

java.lang.NullPointerException
    org.postgresql.core.CachedQueryCreateAction.create(CachedQueryCreateAction.java:39)
    org.postgresql.core.CachedQueryCreateAction.create(CachedQueryCreateAction.java:17)
    org.postgresql.util.LruCache.borrow(LruCache.java:115)
    org.postgresql.core.QueryExecutorBase.borrowQuery(QueryExecutorBase.java:266)
    org.postgresql.jdbc.PgConnection.borrowQuery(PgConnection.java:143)
    org.postgresql.jdbc.PgPreparedStatement.<init>(PgPreparedStatement.java:88)
    org.postgresql.jdbc.PgConnection.prepareStatement(PgConnection.java:1256)
    org.postgresql.jdbc.PgConnection.prepareStatement(PgConnection.java:1622)
    org.postgresql.jdbc.PgConnection.prepareStatement(PgConnection.java:415)
    org.apache.commons.dbcp2.DelegatingConnection.prepareStatement(DelegatingConnection.java:293)
    org.apache.commons.dbcp2.DelegatingConnection.prepareStatement(DelegatingConnection.java:293)
    org.hibernate.engine.jdbc.internal.StatementPreparerImpl$1.doPrepare(StatementPreparerImpl.java:87)
    org.hibernate.engine.jdbc.internal.StatementPreparerImpl$StatementPreparationTemplate.prepareStatement(StatementPreparerImpl.java:172)
    org.hibernate.engine.jdbc.internal.StatementPreparerImpl.prepareStatement(StatementPreparerImpl.java:72)
    org.hibernate.id.SequenceGenerator.generateHolder(SequenceGenerator.java:114)
    org.hibernate.id.SequenceHiLoGenerator.generate(SequenceHiLoGenerator.java:62)
    org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:101)
    org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:192)
    org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:177)
    org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:97)
    org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:73)
    org.hibernate.internal.SessionImpl.fireSaveOrUpdate(SessionImpl.java:648)
    org.hibernate.internal.SessionImpl.saveOrUpdate(SessionImpl.java:640)
    org.hibernate.internal.SessionImpl.saveOrUpdate(SessionImpl.java:635)
    com.pulseBeatMaster.dao.impl.EmployeeDaoImpl.saveOrUpdate(EmployeeDaoImpl.java:43)
    com.pulseBeatMaster.dao.impl.EmployeeDaoImpl$$FastClassBySpringCGLIB$$dadeda1c.invoke(<generated>)
    org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)
    org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:738)
    org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157)
    org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:136)
    org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
    org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:673)
    com.pulseBeatMaster.dao.impl.EmployeeDaoImpl$$EnhancerBySpringCGLIB$$a0d1e9e8.saveOrUpdate(<generated>)
    com.pulseBeatMaster.service.impl.EmployeeServiceImpl.saveOrUpdate(EmployeeServiceImpl.java:34)
    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:333)
    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:99)
    org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:282)
    org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96)
    org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
    org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:213)
    com.sun.proxy.$Proxy64.saveOrUpdate(Unknown Source)
    com.pulseBeatMaster.controller.EmployeeController.saveUser(EmployeeController.java:60)
    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.doInvoke(InvocableHandlerMethod.java:205)
    org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:133)
    org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:97)
    org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:827)
    org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:738)
    org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85)
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:963)
    org.springframework.web.servlet.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:661)
    org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:742)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

模型类

@Entity
@Table(name = "employee", schema = "schpulsebeat")
public class Employee {
    private Integer id;
    private String firstName;
    private String lastName;
    private String address;
    private Date dob;
    private String nic;
    private String email;
    private Integer companyId;
    private Integer departmentId;

    public Employee() {
        super();
    }

    public Employee(Integer id, String firstName, String lastName, String address, Date dob, String nic, String email,
            Integer companyId, Integer departmentId) {
        super();
        this.id = id;
        this.firstName = firstName;
        this.lastName = lastName;
        this.address = address;
        this.dob = dob;
        this.nic = nic;
        this.email = email;
        this.companyId = companyId;
        this.departmentId = departmentId;
    }

        @Id

//schpulsebeat is a schema. employee_id_seq is created as sequence in postgresql.
        @SequenceGenerator(name="employee_id_seq",sequenceName="schpulsebeat.employee_id_seq",allocationSize=1)
        @GeneratedValue(strategy=GenerationType.SEQUENCE,generator="employee_id_seq")
        @Column(name="employee_id")
        public Integer getId() {
            return id;
        }

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

    @Column(name="first_name")
    public String getFirstName() {
        return firstName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    @Column(name="last_name")
    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    @Column(name="address")
    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    @Column(name="dob")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    public Date getDob() {
        return dob;
    }

    public void setDob(Date dob) {
        this.dob = dob;
    }

    @Column(name="nic")
    public String getNic() {
        return nic;
    }

    public void setNic(String nic) {
        this.nic = nic;
    }

    @Column(name="email")
    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    @Column(name="company_id", nullable=true)
    public Integer getCompanyId() {
        return companyId;
    }

    public void setCompanyId(Integer companyId) {
        this.companyId = companyId;
    }

    @Column(name="department_id", nullable=true)
    public Integer getDepartmentId() {
        return departmentId;
    }

    public void setDepartmentId(Integer departmentId) {
        this.departmentId = departmentId;
    }

    @Override
    public String toString() {
        return "Employee [id=" + id + ", firstName=" + firstName + ", lastName=" + lastName + ", address=" + address
                + ", dob=" + dob + ", nic=" + nic + ", email=" + email + ", companyId=" + companyId + ", departmentId="
                + departmentId + "]";
    }



}

Controller

@RequestMapping(value = "/saveEmployee", method = RequestMethod.POST)
    public ModelAndView saveUser(@ModelAttribute("employeeForm") Employee employee) {

        //System.out.println("object data"+employee.toString());
        employeeService.saveOrUpdate(employee);
        return new ModelAndView("redirect:/");
    }

jsp 页面(为了方便删除了所有 css 样式)

<spring:url value="/saveEmployee" var="saveURL"></spring:url>


<form:form action="${saveURL}" method="POST" modelAttribute="employeeForm">

    <form:hidden path="id" />


        <form:select class="form-control" name="companyId">
            <form:option value="1">Lunah Labs</option>
            <form:option value="2">XYZ conf</option>
            <form:option value="3">New Tech Lead</option>
            <form:option value="4">FINWIN</option>
        </form:select>


        <form:select class="form-control" name="departmentId">
            <form:option value="4">CIS</option>
            <form:option value="5">Tech</option>
            <form:option value="6">Electronic</option>
            <form:option value="7">Event</option>
        </form:select>

        <form:input path="firstName"/>

        <form:input path="lastName" />

        <form:input path="address" />

        <form:input path="dob" type="date" />

        <form:input path="nic" />

        <form:input path="email" /> 

        <button type="submit" >Submit</button>

</form:form>

我很担心

1)dob字段

2)生成的id

最佳答案

请给出EmployeeDaoImpl.java类的剩余代码。主要异常发生在第 43 行的 EmployeeDaoImpl.java 类中。

关于Spring 和 PostgreSQL 抛出 java.lang.NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44505661/

相关文章:

java - PostMapping Service Rest with Spring boot错误请求方法 'POST'不支持

java - 如何告诉 Spring 扫描给定的注释而不用 @Component 注释该注释?

javascript - Angular 帖子未按预期提供请求正文

postgresql - 如何在 PostgreSQL 的 UPDATE 语句中将 TEXT 数据类型值转换为 DATE 数据类型值

java - 表单在更新当前客户端时,删除与父表连接的子表信息

mysql - 如何使 AWS RDS MySql 5.6 不区分大小写?

postgresql - 如何用 SQLAlchemy 反射(reflect)类型?

sql - 是否可以在 PostgreSQL 中创建一个包含子午线指示器的时间戳列?

java - hibernate 与 Tomcat

java - websphere + SSLv3 SSLContext 不可用