保存Spring实体时的java.lang.NullPonterException
我尝试读取Excel文件并将数据保存在postgres数据库中。在某些文件中,我收到以下错误消息: java.lang.NullPointerException:null 在de.hspf.讲师服务.semestertock.semestertock.hashCode(semestertock.java:51)~[classes/:na] 在java.lang.Object.toString(Object.java:236)~[na:1.8.0_161] 在java.lang.String.valueOf(String.java:2994)~[na:1.8.0_161] 在java.lang.StringBuilder.append(StringBuilder.java:131)~[na:1.8.0_161] 在org.hibernate.pretty.MessageHelper.infoString(MessageHelper.java:57)~[hibernate-core-5.3.9.Final.jar:5.3.9.Final] 在org.hibernate.ununiqueobjectexception.getMessage(ununiqueobjectexception.java:61)~[hibernate-core-5.3.9.Final.jar:5.3.9.Final] 在org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:123)~[hibernate-core-5.3.9.Final.jar:5.3.9.Final] 在org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:181)~[hibernate-core-5.3.9.Final.jar:5.3.9.Final] 在org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:188)~[hibernate-core-5.3.9.Final.jar:5.3.9.Final] 在org.hibernate.internal.SessionImpl.fireMerge(SessionImpl.java:933)~[hibernate-core-5.3.9.Final.jar:5.3.9.Final] 在org.hibernate.internal.SessionImpl.merge(SessionImpl.java:892)~[hibernate-core-5.3.9.Final.jar:5.3.9.Final] 在org.hibernate.engine.spi.CascadingActions$6.cascade(CascadingActions.java:261)~[hibernate-core-5.3.9.Final.jar:5.3.9.Final] 在org.hibernate.engine.internal.Cascade.cascadeToOne(Cascade.java:490)~[hibernate-core-5.3.9.Final.jar:5.3.9.Final] 在org.hibernate.engine.internal.Cascade.cascadeAssociation(Cascade.java:415)~[hibernate-core-5.3.9.Final.jar:5.3.9.Final] 在org.hibernate.engine.internal.Cascade.cascadeProperty(Cascade.java:216)~[hibernate-core-5.3.9.Final.jar:5.3.9.Final] 在org.hibernate.engine.internal.Cascade.cascadeCollectionElements(Cascade.java:523)~[hibernate-core-5.3.9.Final.jar:5.3.9.Final] 在org.hibernate.engine.internal.Cascade.cascadeCollection(Cascade.java:455)~[hibernate-core-5.3.9.Final.jar:5.3.9.Final] 在org.hibernate.engine.internal.Cascade.cascadeAssociation(Cascade.java:418)~[hibernate-core-5.3.9.Final.jar:5.3.9.Final] 在org.hibernate.engine.internal.Cascade.cascadeProperty(Cascade.java:216)~[hibernate-core-5.3.9.Final.jar:5.3.9.Final] 在org.hibernate.engine.internal.Cascade.Cascade(Cascade.java:149)~[hibernate-core-5.3.9.Final.jar:5.3.9.Final] 在org.hibernate.event.internal.DefaultMergeEventListener.cascadeOnMerge(DefaultMergeEventListener.java:460)~[hibernate-core-5.3.9.Final.jar:5.3.9.Final] 在org.hibernate.event.internal.DefaultMergeEventListener.entityIsPersistent(DefaultMergeEventListener.java:202)~[hibernate-core-5.3.9.Final.jar:5.3.9.Final] 在org.hibernate.event.internal.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:176)~[hibernate-core-5.3.9.Final.jar:5.3.9.Final] 在org.hibernate.event.internal.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:69)~[hibernate-core-5.3.9.Final.jar:5.3.9.Final] 在org.hibernate.internal.SessionImpl.fireMerge(SessionImpl.java:900)~[hibernate-core-5.3.9.Final.jar:5.3.9.Final] 在org.hibernate.internal.SessionImpl.merge(SessionImpl.java:886)~[hibernate-core-5.3.9.Final.jar:5.3.9.Final] at sun.reflect.GeneratedMethodAccessor88.invoke(未知源)~[na:na] 在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)~[na:1.8.0¡] 在java.lang.reflect.Method.invoke(Method.java:498)~[na:1.8.0_161] 在org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:308)~[spring-orm-5.1.6.RELEASE.jar:5.1.6.RELEASE] 在com.sun.proxy.$Proxy116.merge(未知源)~[na:na] 在org.springframework.data.jpa.repository.support.SimpleJpaRepository.save(SimpleJpaRepository.java:492)~[spring-data-jpa-2.1.6.RELEASE.jar:2.1.6.RELEASE] at sun.reflect.GeneratedMethodAccessor86.invoke(未知源)~[na:na] 在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)~[na:1.8.0¡] 在java.lang.reflect.Method.invoke(Method.java:498)~[na:1.8.0_161] 在org.springframework.data.repository.core.support.RepositoryComposition$RepositoryFragments.invoke(RepositoryComposition.java:359)~[spring-data-commons-2.1.6.RELEASE.jar:2.1.6.RELEASE] 在org.springframework.data.repository.core.support.RepositoryComposition.invoke(RepositoryComposition.java:200)~[spring-data-commons-2.1.6.RELEASE.jar:2.1.6.RELEASE] 在org.springframework.data.repository.core.support.RepositoryFactorySupport$ImplementationMethodExecutionInterceptor.invoke(RepositoryFactorySupport.java:644)~[spring-data-commons-2.1.6.RELEASE.jar:2.1.6.RELEASE] 在org.springframework.aop.framework.ReflectiveMethodInvocation.procedue(ReflectiveMethodInvocation.java:186)~[spring-aop-5.1.6.RELEASE.jar:5.1.6.RELEASE] 在org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.doInvoke(RepositoryFactorySupport.java:608)~[spring-data-commons-2.1.6.RELEASE.jar:2.1.6.RELEASE] 在org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.lambda$invoke$3(RepositoryFactorySupport.java:595)~[spring-data-commons-2.1.6.RELEASE.jar:2.1.6.RELEASE] 在org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.invoke(RepositoryFactorySupport.java:595)~[spring-data-commons-2.1.6.RELEASE.jar:2.1.6.RELEASE] 在org.springframework.aop.framework.ReflectiveMethodInvocation.procedue(ReflectiveMethodInvocation.java:186)~[spring-aop-5.1.6.RELEASE.jar:5.1.6保存Spring实体时的java.lang.NullPonterException,spring,hibernate,spring-boot,spring-data-jpa,Spring,Hibernate,Spring Boot,Spring Data Jpa,我尝试读取Excel文件并将数据保存在postgres数据库中。在某些文件中,我收到以下错误消息: java.lang.NullPointerException:null 在de.hspf.讲师服务.semestertock.semestertock.hashCode(semestertock.java:51)~[classes/:na] 在java.lang.Object.toString(Object.java:236)~[na:1.8.0_161] 在java.lang.String.va
@Entity
public class SemesterLecture implements Serializable {
@Id
@ManyToOne
@JsonIgnore
@JoinColumn
private Semester semester;
@Id
@ManyToOne
@JoinColumn
private Lecture lecture;
private String grade;
@OneToMany(cascade = CascadeType.ALL, orphanRemoval = true)
private List<LectureDateTime> lectureDateTimes;
public SemesterLecture(Lecture lecture, String grade) {
this.lecture = lecture;
this.grade = grade;
}
public SemesterLecture() {
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof SemesterLecture)) return false;
SemesterLecture that = (SemesterLecture) o;
return Objects.equals(semester.getTitle(), that.semester.getTitle()) &&
Objects.equals(lecture.getTitle(), that.lecture.getTitle());
}
@Override
public int hashCode() {
return Objects.hash(semester.getTitle(), lecture.getTitle(), grade);
}
@EventListener(ApplicationReadyEvent.class)
@Transactional
public void readExcelFileFolder() throws IOException, InvalidFormatException, NotFoundException {
LOG.info("Load Excel Files from folder...");
FileFilter filter = new ExcelFileFilter ();
Resource[] resourceFiles = resourcePatternResolver.getResources("classpath:excel-files/*.xls");
for (Resource resource : resourceFiles) {
readExcelFile(resource.getInputStream(), resource.getFilename());
}
}
public void readExcelFile(InputStream inputStream, String fileName) throws IOException, InvalidFormatException, NotFoundException {
Workbook workbook = WorkbookFactory.create(inputStream);
DataFormatter dataFormatter = new DataFormatter();
LOG.info("Read Excel File: " + fileName.substring(0, fileName.lastIndexOf('.')));
Course existingCourse = courseRepository.findByCourseNumber(fileName.replace(" ", "").substring(0, fileName.lastIndexOf('.')));
if(existingCourse == null){
return;
}
LOG.info("Found course with title " + existingCourse.getCourseTitle());
if(existingCourse.getSemesters().size() < 1){
for(int i = 1; i < 8; i++){
Semester semester = new Semester();
semester.setTitle("Semester " + i);
semester.setSemesterLectures(new ArrayList<SemesterLecture>());
semester.setSemesterNumber(i);
existingCourse.getSemesters().add(semesterRepository.save(semester));
}
LOG.info("Added " + existingCourse.getSemesters().size() + " Semesters");
}
for(int y = 0; y < 5; y++){
Sheet sheet = workbook.getSheetAt(y);
for (Row row: sheet) {
String title = dataFormatter.formatCellValue(row.getCell(0));
String modulNumber = dataFormatter.formatCellValue(row.getCell(1)).replace(" ", "");
String language = dataFormatter.formatCellValue(row.getCell(2));
int semesterNumber = 1;
try{
semesterNumber = Integer.parseInt(dataFormatter.formatCellValue(row.getCell(3)).replace(".", ""));
}catch (Exception e){}
if(title instanceof String && modulNumber instanceof String && !title.isEmpty() && !modulNumber.isEmpty() && !title.startsWith("Module")){
try{
if(lectureRepository.existsByModulNumber(modulNumber.replace(" ", ""))){
Lecture lecture = lectureRepository.findByModulNumber(modulNumber.replace(" ", ""));
SemesterLecture sm = new SemesterLecture(lecture, "0");
sm.setSemester(existingCourse.getSemesters().get(semesterNumber-1));
sm.setLecture(lecture);
sm.setGrade("0");
existingCourse.getSemesters().get(semesterNumber-1).getSemesterLectures().add(sm);
LOG.info(sm.getLecture().getTitle() + sm.getSemester().getTitle());
}
} catch (NumberFormatException e) {
throw new NotFoundException("Lecture does not exist");
}
}
}
}
for(Semester semester : existingCourse.getSemesters()){
semesterRepository.save(semester);
}
courseRepository.save(existingCourse);
LOG.info("Saved all lectures from course " + existingCourse.getCourseTitle());
}