Исключение нулевого указателя Spring Data JPA - PullRequest
0 голосов
/ 22 марта 2020

введите описание изображения здесь Я новичок в репозитории Spring Boot Data JPA. Это мое первое приложение с JPA. Я пытаюсь получить данные из БД. Но который возвращает NULL.

Файл сущности

import javax.persistence.*;

@Entity
@Table(name = "TASK_DETAILS")
public class TaskDetails {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "TASK_DETAILS_ID")
private long taskDetailsId;

@Column(name = "TASK_NAME")
private String TaskName;

@Column(name = "TASK_POLLING_TIME")
private int TaskTime;

@Column(name = "TASK_FILE")
private String TaskClassFile;

@Column(name = "TASK_STATUS")
private String TaskStatus;

public long getTaskDetailsId() {
return taskDetailsId;
}

public void setTaskDetailsId(long taskDetailsId) {
this.taskDetailsId = taskDetailsId;
}

public String getTaskName() {
return TaskName;
}

public void setTaskName(String taskName) {
TaskName = taskName;
}

public int getTaskTime() {
return TaskTime;
}

public void setTaskTime(int taskTime) {
TaskTime = taskTime;
}

public String getTaskClassFile() {
return TaskClassFile;
}

public void setTaskClassFile(String taskClassFile) {
TaskClassFile = taskClassFile;
}

public String getTaskStatus() {
return TaskStatus;
}

public void setTaskStatus(String taskStatus) {
TaskStatus = taskStatus;
}
}

Файл репозитория

import java.util.Collection;
import java.util.List;
import java.util.Optional;

@Repository
public interface TaskDetailsRepository extends JpaRepository<TaskDetails, String> {

TaskDetails findByTaskDetailsId(final long id);
}

My Main Метод

@Service
public class ImportAmazonData {

@Autowired
private TaskDetailsRepository taskDetailsRepositoryDAO;

public void getProductsFromAmazonStore(JobExecutionContext context) throws ClassNotFoundException {
final long taskID = (long) context.getJobDetail().getJobDataMap().get("taskId");

TaskDetails taskDetails = taskDetailsRepositoryDAO.findByTaskDetailsId(taskID);
System.out.println("Result : " + taskDetails.getTaskClassFile());
}
}

ProductSyn c Файл

   import com.example.Schedular.AmazonSync.ImportAmazonData;
    import org.quartz.Job;
    import org.quartz.JobExecutionContext;
    import org.quartz.JobExecutionException;
    import org.springframework.stereotype.Component;

    public class ProductSync implements Job {

    @Autowired
    private ImportAmazonData importAmazonData;

    @Override
    public void execute(JobExecutionContext context) throws JobExecutionException {
        try {
            importAmazonData.getProductsFromAmazonStore(context);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
}

Здесь я пытаюсь получить TaskDetails по id. Но моя задачаDetailsRepositoryDAO была нулевой. Здесь я приложил свой журнал ошибок. Пожалуйста, дайте мне знать. Заранее спасибо.

ЖУРНАЛ ОШИБКИ


java.lang.NullPointerException: null
    at com.example.Schedular.AmazonSync.ImportAmazonData.getProductsFromAmazonStore(ImportAmazonData.java:20) ~[classes/:na]
    at com.example.Schedular.SyncData.ProductSync.execute(ProductSync.java:16) ~[classes/:na]
    at org.quartz.core.JobRunShell.run(JobRunShell.java:202) ~[quartz-2.3.2.jar:na]
    at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573) [quartz-2.3.2.jar:na]

Ответы [ 2 ]

0 голосов
/ 22 марта 2020

Попробуйте добавить это в основной файл своей весенней загрузки (я думаю, что это SchedularApplication) @EnableJpaRepositories ("имя вашего пакета репозитория jpa")

0 голосов
/ 22 марта 2020

В вашем файле репозитория, т.е. TaskDetailsRepository, должно быть, как показано ниже:

import java.util.Collection;
import java.util.List;
import java.util.Optional;

@Repository
public interface TaskDetailsRepository extends JpaRepository<TaskDetails, Long> {

Optional<TaskDetails> findByTaskDetailsId(Long id);
}

Используйте обертки вместо примитивов в классах вашего домена.

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "TASK_DETAILS_ID")
private Long taskDetailsId;

Если вы пытаетесь найти запись на основе определенного значения затем укажите этот тип, т.е. Long . И всегда используйте Optional, если ваш метод собирается вернуть поющую запись из базы данных. это поможет вам восстановить NullPointers.

Это может помочь вам.

...