程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Spring Boot 在应用程序启动时抛出空指针异常大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决Spring Boot 在应用程序启动时抛出空指针异常?

开发过程中遇到Spring Boot 在应用程序启动时抛出空指针异常的问题如何解决?下面主要结合日常开发的经验,给出你关于Spring Boot 在应用程序启动时抛出空指针异常的解决方法建议,希望对你解决Spring Boot 在应用程序启动时抛出空指针异常有所启发或帮助;

我是 Spring Boot 和 Hibernate 的新手,遇到了一些错误,我请求帮助解决。 我使用 Getters & Setters 创建了 3 个实体,如下所示:

@Entity
@table(name="Cinema_Hall")
public class CinemaHall {
    
    @ID
    @Column(name="Hall_name")
    private String hallname;
    
    @Column(name = "Address_line_1")
    private String addressline1;
    
    @Column(name = "Address_line_2")
    private String addressline2;
    
    @Column(name = "Address_line_3")
    private String addressline3;
    
    @Column(name="No_Of_Screens")
    private int noOfScreens;
    
    @OnetoMany(mappedBy="cinemaHall")
    private List<CinemaDetail> runningCinema = new ArrayList<> ();
}

@Entity
@table(name = "CINEMA_DETAILS")
public class CinemaDetail {

    @ID
    @GeneratedValue
    @Column(name="Cinema_ID")
    private int cinemaID;
    @Column(name="Cinema_name")
    private String cinemaname;
    @Column(name="Cinema_Begin_Time")
    private String beginTime;
    @Column(name="Cinema_End_Time")
    private String endTime;
    @Column(name="Cinema_Ticket_Price")
    private float ticketPrice;
    @Column(name="Cinema_Screen_No")
    private int screenNo;
    
    @OnetoOne
    @JoinColumn(name="Seat_ID",referencedColumnname = "Cinema_ID")
    @autowired
    private SeatDetail seatDetails;
    
    @ManyToOne
    @JoinColumn(name="Hall_ID",referencedColumnname="Cinema_ID")
    private CinemaHall cinemaHall;
}

@Entity
@table(name = "Screen_Seats")
public class SeatDetail {
    
    @OnetoOne(mappedBy="seatDetails")
    @ID
    @GeneratedValue
    private int ID;
    
    @Column(name = "Seat_No")
    @Convert(converter = SeatDetailConverter.class)
    private List<String> seatNo;
    
    @Column(name = "Seat_Available")
    @Convert(converter = SeatAvailabilityConverter.class)
    private List<Boolean> seatAvailability;
    
    @TransIEnt 
    private final String AlphaBETS = "ABCDEFGHIJKLMnopQRSTUVWXYZ";
}

我通过扩展 CrudRepository 编写了它们各自 DAO 的接口。 服务类如下:

@Service
public class CinemaHallRepository {

    private List<CinemaHall> cinemaHalls;
    @autowired
    private CinemaHallDao cinemaHall;
    
    public CinemaHallRepository() {
        System.out.println("In CinemaHallRepository Constructor");
        addCinemaHall("Roxy","Roxy Address 1","Roxy Address 2","Roxy Address 3",3);
        addCinemaHall("Hind","Hind Address 1","Hind Address 2","Hind Address 3",4);
        addCinemaHall("iNox","INOX Address 1","INOX Address 2","INOX Address 3",5);
        
    }
}

控制器类如下:

@RestController
public class CinemaHallController {

    @autowired
    private CinemaHallRepository hallRepository;
        
    @RequestMapPing(method=RequestMethod.GET,value=("/cinemahalls"))
    public List<String> getCinemaHalls() {
        //hallRepository.setDefaultCinemaHalls();
        return hallRepository.getCinemaHalls();
}

当我尝试运行应用程序时,控制台抛出以下错误:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Invocation of init method Failed; nested exception is java.lang.NullPointerException: Cannot invoke "org.hibernate.mapPing.keyvalue.getColumnIterator()" because the return value of "org.hibernate.mapPing.PersistentClass.getKey()" is null
    at org.springframework.beans.factory.support.AbstractautowireCapablebeanfactory.initializeBean(AbstractautowireCapablebeanfactory.java:1786) ~[spring-beans-5.3.4.jar:5.3.4]
    at org.springframework.beans.factory.support.AbstractautowireCapablebeanfactory.doCreateBean(AbstractautowireCapablebeanfactory.java:602) ~[spring-beans-5.3.4.jar:5.3.4]
    at org.springframework.beans.factory.support.AbstractautowireCapablebeanfactory.createBean(AbstractautowireCapablebeanfactory.java:524) ~[spring-beans-5.3.4.jar:5.3.4]
    at org.springframework.beans.factory.support.Abstractbeanfactory.lambda$doGetBean$0(Abstractbeanfactory.java:335) ~[spring-beans-5.3.4.jar:5.3.4]
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-5.3.4.jar:5.3.4]
    at org.springframework.beans.factory.support.Abstractbeanfactory.doGetBean(Abstractbeanfactory.java:333) ~[spring-beans-5.3.4.jar:5.3.4]
    at org.springframework.beans.factory.support.Abstractbeanfactory.getBean(Abstractbeanfactory.java:208) ~[spring-beans-5.3.4.jar:5.3.4]
    at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1153) ~[spring-context-5.3.4.jar:5.3.4]
    at org.springframework.context.support.AbstractApplicationContext.finishbeanfactoryInitialization(AbstractApplicationContext.java:907) ~[spring-context-5.3.4.jar:5.3.4]
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:582) ~[spring-context-5.3.4.jar:5.3.4]
    at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:144) ~[spring-boot-2.4.3.jar:2.4.3]
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:767) ~[spring-boot-2.4.3.jar:2.4.3]
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:759) ~[spring-boot-2.4.3.jar:2.4.3]
    at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:426) ~[spring-boot-2.4.3.jar:2.4.3]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:326) ~[spring-boot-2.4.3.jar:2.4.3]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1311) ~[spring-boot-2.4.3.jar:2.4.3]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1300) ~[spring-boot-2.4.3.jar:2.4.3]
    at com.cinema.hall.ProjectCinemaHallApplication.main(ProjectCinemaHallApplication.java:10) ~[classes/:na]
Caused by: java.lang.NullPointerException: Cannot invoke "org.hibernate.mapPing.keyvalue.getColumnIterator()" because the return value of "org.hibernate.mapPing.PersistentClass.getKey()" is null
    at org.hibernate.cfg.Ejb3JoinColumn.checkReferencedColumnsType(Ejb3JoinColumn.java:810) ~[hibernate-core-5.4.28.Final.jar:5.4.28.Final]
    at org.hibernate.cfg.BinderHelper.createSyntheticPropertyReference(BinderHelper.java:255) ~[hibernate-core-5.4.28.Final.jar:5.4.28.Final]
    at org.hibernate.cfg.ToOneFkSecondPass.doSecondPass(ToOneFkSecondPass.java:101) ~[hibernate-core-5.4.28.Final.jar:5.4.28.Final]
    at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.processEndOfQueue(InFlightMetadataCollectorImpl.java:1823) ~[hibernate-core-5.4.28.Final.jar:5.4.28.Final]
    at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.processFkSecondPassesInorder(InFlightMetadataCollectorImpl.java:1767) ~[hibernate-core-5.4.28.Final.jar:5.4.28.Final]
    at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.processSecondPasses(InFlightMetadataCollectorImpl.java:1655) ~[hibernate-core-5.4.28.Final.jar:5.4.28.Final]
    at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:295) ~[hibernate-core-5.4.28.Final.jar:5.4.28.Final]
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.Metadata(EntityManagerFactoryBuilderImpl.java:1224) ~[hibernate-core-5.4.28.Final.jar:5.4.28.Final]
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1255) ~[hibernate-core-5.4.28.Final.jar:5.4.28.Final]
    at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvIDer.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvIDer.java:58) ~[spring-orm-5.3.4.jar:5.3.4]
    at org.springframework.orm.jpa.LocalContainerEntityManagerfactorybean.createNativeEntityManagerFactory(LocalContainerEntityManagerfactorybean.java:365) ~[spring-orm-5.3.4.jar:5.3.4]
    at org.springframework.orm.jpa.AbstractEntityManagerfactorybean.buildNativeEntityManagerFactory(AbstractEntityManagerfactorybean.java:409) ~[spring-orm-5.3.4.jar:5.3.4]
    at org.springframework.orm.jpa.AbstractEntityManagerfactorybean.afterPropertIEsSet(AbstractEntityManagerfactorybean.java:396) ~[spring-orm-5.3.4.jar:5.3.4]
    at org.springframework.orm.jpa.LocalContainerEntityManagerfactorybean.afterPropertIEsSet(LocalContainerEntityManagerfactorybean.java:341) ~[spring-orm-5.3.4.jar:5.3.4]
    at org.springframework.beans.factory.support.AbstractautowireCapablebeanfactory.invokeInitMethods(AbstractautowireCapablebeanfactory.java:1845) ~[spring-beans-5.3.4.jar:5.3.4]
    at org.springframework.beans.factory.support.AbstractautowireCapablebeanfactory.initializeBean(AbstractautowireCapablebeanfactory.java:1782) ~[spring-beans-5.3.4.jar:5.3.4]
    ... 17 common frames omitted

解决方法

@OneToOne(mappedBy = "" ) 用于定义共享密钥。这里的问题是外键和主键的映射。当您为以下实体类中的同一列同时定义了 @Id@OneToOne(mappedBy = "") 时,Hibernate 无法理解其中定义的映射。很有可能,您将不得不更改 mappedBy= 的值部分的内容。

@Entity
@Table(name = "Screen_Seats")
public class SeatDetail {
    
    @OneToOne(mappedBy="seatDetails") // you need to remove this and define the mapping in different way
    @Id
    @GeneratedValue
    private int ID;
     ....
}

大佬总结

以上是大佬教程为你收集整理的Spring Boot 在应用程序启动时抛出空指针异常全部内容,希望文章能够帮你解决Spring Boot 在应用程序启动时抛出空指针异常所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: