jpa java.lang.IllegalStateException:无法执行- CommandLineRunner NullPointer异常

t3irkdon  于 5个月前  发布在  Java
关注(0)|答案(1)|浏览(61)

存储库

package com.example.demo.jpa;

import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.transaction.Transactional;

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

import com.example.demo.entity.Person;

@Repository
@Transactional
public class RepositoryJpa  {

    @PersistenceContext
    EntityManager entityManager;
    
    //@Autowired
    Person person = new Person();
    
    public Person findById(int id) {
        System.out.println("value of parameter id is "+id);
        
        
        return entityManager.find(Person.class,id);
    }
    
    public Person update(Person person) {
        return entityManager.merge(person);
    }
}

字符串
实体表:

package com.example.demo.entity;

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

@Entity
//@Table(name="person")
public class Person {

    @Id
    private int id;

    private String name;
    private String location;
    private String birth_date;

    // public Person(int i, String string, String string2, String string3) {}

    public Person(int id, String name, String location, String birth_date) {
        // super();
        this.id = id;
        this.name = name;
        this.location = location;
        this.birth_date = birth_date;
    }

    public Person(String name, String location, String birth_date) {
        // super();

        this.name = name;
        this.location = location;
        this.birth_date = birth_date;
    }

    public Person() {
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
        System.out.println("i called setID=" + this.id);
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
        System.out.println("i called setName=" + this.name);
    }

    public String getLocation() {
        return location;
    }

    public void setLocation(String location) {
        this.location = location;
        System.out.println("i called setLocation=" + this.location);
    }

    public String getBirth_date() {
        return birth_date;
    }

    public void setBirth_date(String birth_date) {
        this.birth_date = birth_date;
        // System.out.println("i called setBirth_ID="+this.birth_date);
    }

    /*
     * @Override public String toString() { return "Person [id=" + id + ", name=" +
     * name + ", location=" + location + ", birth_date=" + birth_date + ", getId()="
     * + getId() + ", getName()=" + getName() + ", getLocation()=" + getLocation() +
     * ", getBirth_date()=" + getBirth_date() + "]"; }
     */

}


SpringBoot应用程序

package com.example.demo;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.context.annotation.Bean;

import com.example.demo.entity.Person;
import com.example.demo.jpa.RepositoryJpa;

@SpringBootApplication
public class JpaDemoApplication implements CommandLineRunner {
    
    private Logger logger=LoggerFactory.getLogger(this.getClass());
    
    //@Autowired
    
    Person person = new Person();
    
    RepositoryJpa repo = new RepositoryJpa();

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        SpringApplication.run(JpaDemoApplication.class, args);
    }

    @Override
    public void run(String... args) throws Exception {
        // TODO Auto-generated method stub
        
        System.out.println("hello all");
        
        logger.info("find by id -> {}", repo.findById(2));
        
        logger.info("insert user-> {}",repo.update(new Person(5,"gaurav","chicago","05/06/82")));
        
    }
}


应用性能

spring.h2.console.enabled=true
#spring.datasource.url=jdbc:h2:mem:testdb
#spring.batch.job.enabled=false
spring.jpa.show-sql=true
#@EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class})
spring.jpa.defer-datasource-initialization=true


我是SpringBoot的初学者,我不知道我做错了什么,与实体管理器方法有关,它给出了错误,而且@Autowired不工作,我手动创建对象!
帮帮我!
控制台错误截图也分享在下面,请检查:

Failed to execute CommandLineRunner
    at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:780) ~[spring-boot-2.6.4.jar:2.6.4]
    at org.springframework.boot.SpringApplication.callRunners(SpringApplication.java:761) ~[spring-boot-2.6.4.jar:2.6.4]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) ~[spring-boot-2.6.4.jar:2.6.4]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1312) ~[spring-boot-2.6.4.jar:2.6.4]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1301) ~[spring-boot-2.6.4.jar:2.6.4]
    at com.example.demo.JpaDemoApplication.main(JpaDemoApplication.java:31) ~[classes/:na]
Caused by: java.lang.NullPointerException: null
    at com.example.demo.jpa.RepositoryJpa.update(RepositoryJpa.java:31) ~[classes/:na]
    at com.example.demo.JpaDemoApplication.run(JpaDemoApplication.java:46) ~[classes/:na]
    at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:777) ~[spring-boot-2.6.4.jar:2.6.4]
    ... 5 common frames omitted


console

4si2a6ki

4si2a6ki1#

你应该在JpaDemoApplication类中Autowire存储库bean,你永远不应该使用new关键字为spring组件创建对象。

@SpringBootApplication
public class JpaDemoApplication implements CommandLineRunner {

   private Logger logger=LoggerFactory.getLogger(this.getClass());

   @Autowired
   RepositoryJpa repositoryJpa;

public static void main(String[] args) {
    // TODO Auto-generated method stub

    SpringApplication.run(JpaDemoApplication.class, args);
    
}

@Override
public void run(String... args) throws Exception {
    // TODO Auto-generated method stub
    
    System.out.println("hello all");
    
    logger.info("find by id -> {}", repo.findById(2));
    
    logger.info("insert user-> {}",repo.update(new Person(5,"gaurav","chicago","05/06/82")));
    
   }

}

字符串

相关问题