簡體   English   中英

SpringMvc + Hibernate:在手動向表中插入數據時出現NullPointerException

[英]SpringMvc+Hibernate: Getting NullPointerException in manually inserting data to table

當我嘗試使用休眠方式手動插入MySql表時,出現此錯誤。 我正在嘗試向應用程序中插入一些默認數據,但是在手動插入時卻出現了Null指針異常。 我是Java編程的新手,因此無法理解如何解決此錯誤。 如果有人可以幫助我,我將非常感激。

User_Role類別:

package com.sanjay31321.sys.model;


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

@Entity @Table(name="user_role")
public class User_Role {

    @Id @Column @GeneratedValue(strategy=GenerationType.AUTO)
    private int id;

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

    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;
    }

}

InsertUserRole

import org.springframework.beans.factory.annotation.Autowired;

import com.sanjay31321.sys.model.User_Role;
import com.sanjay31321.sys.service.UserRoleService;

public class InsertUserRole {
    private static final Logger logger = LoggerFactory.getLogger(InsertUserRole.class);

    @Autowired
    private UserRoleService userRoleService;

    public void insert() {
        User_Role role = new User_Role();

        role.setId(1);
        role.setName("ROLE_ADMIN");
        logger.info("id : "+ role.getId() + " | Role : " + role.getName());
        userRoleService.addUserRole(role);
    }
}

錯誤:

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is java.lang.NullPointerException
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:965)
    org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:855)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:641)
    org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:829)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
root cause

java.lang.NullPointerException com.sanjay31321.sys.preset.data.InsertUserRole.insert(InsertUserRole.java:22) com.sanjay31321.sys.preset.DefaultDataInstall.install(DefaultDataInstall.java:23) com.sanjay31321.sys.controller.DefaultDataController.postinstall(DefaultDataController.java:31) sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) java.lang.reflect.Method.invoke(Method.java:601) org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:219) 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:745) org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:686) org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:80) org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:925) org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:856) org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:953) org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:855) javax.servlet.http.HttpServlet.service(HttpServlet.java:641) org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:829) javax.servlet.http.HttpServlet.service(HttpServlet.java:722)

DefaultDataController class

package com.sanjay31321.sys.controller;

import java.util.Locale;

import javax.validation.Valid;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import com.sanjay31321.sys.preset.DefaultDataInstall;
import com.sanjay31321.sys.preset.model.Install;

@Controller
public class DefaultDataController {
    private static final Logger logger = LoggerFactory.getLogger(DefaultDataController.class);

    @RequestMapping(value = "/install", method = RequestMethod.GET)
    public String getinstall(Locale locale, Install install) {
        logger.info("Welcome to Install Default Settings page ! GET METHOD : The client locale is {}.", locale);
        return "install";
    }

    @RequestMapping(value="/install", method=RequestMethod.POST)
    public String postinstall(@Valid  Install install, BindingResult result, Locale locale){
        logger.info("Welcome to Install Default Settings page ! POST METHOD : The client locale is {}.", locale);
        DefaultDataInstall settings = new DefaultDataInstall();
        settings.install();
        return "install";
    }
}

DefaultDataInstall class

package com.sanjay31321.sys.preset; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.sanjay31321.sys.preset.data.InsertCourse; import com.sanjay31321.sys.preset.data.InsertFeedback; import com.sanjay31321.sys.preset.data.InsertQuestion; import com.sanjay31321.sys.preset.data.InsertQuestionSet; import com.sanjay31321.sys.preset.data.InsertStudent; import com.sanjay31321.sys.preset.data.InsertSubject; import com.sanjay31321.sys.preset.data.InsertTeacher; import com.sanjay31321.sys.preset.data.InsertUser; import com.sanjay31321.sys.preset.data.InsertUserRole; public class DefaultDataInstall { private static final Logger logger = LoggerFactory.getLogger(DefaultDataInstall.class); public void install() { InsertUserRole role = new InsertUserRole(); role.insert(); logger.info("User Role data is installed"); } }

我已附上您要求的課程。

我在github上看到了您的代碼。

它顯示該錯誤,因為userRoleService中的InsertUserRole為null。 因此您不能在其上調用任何方法。

為什么?

您使用DefaultDataInstall new關鍵字創建InsertUserRole對象。 @Autowired在您執行此操作時不起作用,它僅在Spring也實例化DefaultDataInstall時才起作用。 Spring只能在創建對象時將其注入對象。

如何解決。

實例化preset包中的所有對象, @Component它們標記為@Component

另一種方法是,您在控制器中注入ApplicationContext並將其傳遞給正在創建的對象,並從AppContext獲取服務。

@Controller
public class DefaultDataController {
    private static final Logger logger = LoggerFactory.getLogger(DefaultDataController.class);

    @Autowired private ApplicationContext applicationContext;   

    @RequestMapping(value="/install", method=RequestMethod.POST)
    public String postinstall(@Valid  Install install, BindingResult result, Locale locale){
        logger.info("Welcome to Install Default Settings page ! POST METHOD : The client locale is {}.", locale);       
        DefaultDataInstall settings = new DefaultDataInstall(applicationContext);//create a constructor which acceps ApplicationContext object
        settings.install();
        return "install";
    }

    //other code
}

ApplicationContext對象傳遞到要使用Spring bean的所有訂單對象。

public class DefaultDataInstall {

    private static final Logger logger = LoggerFactory.getLogger(DefaultDataInstall.class);
    private ApplicationContext applicationContext;

    public DefaultDataInstall(ApplicationContext applicationContext){
        this.applicationContext = applicationContext;
    }

    public void install() {

        InsertUserRole role = new InsertUserRole();
        role.setUserRoleService(applicationContext.getBean("userRoleServiceImpl"));
        role.insert();
        logger.info("User Role data is installed");

        //other stuff
    }
}

現在,您可以使用傳遞的服務來調用它們上的方法

public class InsertUserRole {
    private static final Logger logger = LoggerFactory.getLogger(InsertUserRole.class);

    private UserRoleService userRoleService;

    public void setUserRoleService(UserRoleService){
        this.userRoleService = userRoleService;
    }

    //other code
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM