Java SpringMvc+;Hibernate:在手动向表插入数据时获取NullPointerException

Java SpringMvc+;Hibernate:在手动向表插入数据时获取NullPointerException,java,mysql,spring,hibernate,Java,Mysql,Spring,Hibernate,当我试图用hibernate手动插入MySql表时,我遇到了这个错误。 我试图将一些默认数据插入到我的应用程序中,但在手动插入时,我得到了空指针异常。我是java编程新手,因此无法理解如何修复此错误。如果有人能帮我做这件事,我将不胜感激 用户角色类: 插入角色 错误: DefaultDataInstall类 package com.sanjay31321.sys.preset; 导入org.slf4j.Logger; 导入org.slf4j.LoggerFactory; 导入com.sanja

当我试图用hibernate手动插入MySql表时,我遇到了这个错误。 我试图将一些默认数据插入到我的应用程序中,但在手动插入时,我得到了空指针异常。我是java编程新手,因此无法理解如何修复此错误。如果有人能帮我做这件事,我将不胜感激

用户角色类:

插入角色

错误:

DefaultDataInstall类

package com.sanjay31321.sys.preset;
导入org.slf4j.Logger;
导入org.slf4j.LoggerFactory;
导入com.sanjay31321.sys.preset.data.InsertCourse;
导入com.sanjay31321.sys.preset.data.InsertFeedback;
导入com.sanjay31321.sys.preset.data.InsertQuestion;
导入com.sanjay31321.sys.preset.data.InsertQuestionSet;
导入com.sanjay31321.sys.preset.data.InsertStudent;
导入com.sanjay31321.sys.preset.data.InsertSubject;
导入com.sanjay31321.sys.preset.data.InsertTeacher;
导入com.sanjay31321.sys.preset.data.InsertUser;
导入com.sanjay31321.sys.preset.data.InsertUserRole;
公共类DefaultDataInstall{
私有静态最终记录器Logger=LoggerFactory.getLogger(DefaultDataInstall.class);
public-void-install(){
InsertUserRole=新的InsertUserRole();
role.insert();
logger.info(“已安装用户角色数据”);
}
}

我已经附加了您要求的类。

我看到您在github上编写代码

显示该错误是因为
InsertUserRole
中的
userRoleService
为空。所以你不能对它调用任何方法

为什么?

您可以使用
DefaultDataInstall
中的
new
关键字创建
InsertUserRole
对象<代码>@Autowired在执行此操作时不起作用,它仅在spring还实例化了
DefaultDataInstall
时起作用。只有在创建对象时,Spring才能在对象中注入某些内容

如何修复它

实例化
预设
包中的所有对象,即将它们标记为
@组件

另一种方法是将ApplicationContext注入控制器,并将其传递给正在创建的对象,然后从AppContext获取服务

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
    }
}
ApplicationContext
对象传递给要使用Springbeans的所有order对象

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

    private UserRoleService userRoleService;

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

    //other code
}
现在,您可以使用传递的服务对它们调用方法


显示DefaultDataController.java的代码。它是如何获得InsertUserRole实例的?非常感谢您的帮助。我会试试这个解决方案。谢谢你,阿米特。我尝试了这个解决方案,但无法正确理解它,所以我选择了@component。它现在运转良好。我想感谢你们为我指明了正确的方向。再次感谢你们。认可的。 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";
    }
}
@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
}
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
}