Как исправить исключение java.lang.NullPointerException при вызове JpaRepository из обычного класса? - PullRequest
0 голосов
/ 12 апреля 2019

Я новый разработчик Java.Я вызываю JpaRepository из обычного класса (не основного, не в контроллере, ..) и получаю ошибку:

java.lang.NullPointerException
    at com.wecommit.criticalService.controller.TableSpaceWarningCRC.doTransData(TableSpaceWarningCRC.java:34)

Вот мой код: обычный класс:

    package com.wecommit.criticalService.critical;

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

import com.wecommit.criticalService.entity.HistoryUpload;

public class CreateDataPerTable {

    HistoryUpload historyUpload;
    int l_historyUpload;

    @Autowired
    TableSpaceWarningCRC tableSpaceWarning;
    //Constructor
    public CreateDataPerTable(TableSpaceWarningCRC tableSpaceWarning) {
    }

    public void setHistoryUpload(HistoryUpload historyUpload) {
        //Get time_upload in historyUpload by historyUploadID

        this.historyUpload = historyUpload;
        l_historyUpload = historyUpload.getId();
    }   

    public void creatDataTables() {
//the error row bellow
            tableSpaceWarning.setTableSpaceWarningCRC(historyUpload);
            tableSpaceWarning.doTransData();


    }

}

Ивызов класса JpaRepository метод:

package com.wecommit.criticalService.critical;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;
import com.wecommit.criticalService.entity.TableSpace;
import com.wecommit.criticalService.repository.TableSpaceRepository;
import com.wecommit.criticalService.entity.HistoryUpload;

@Component
public class TableSpaceWarningCRC {
    HistoryUpload historyUpload;

    @Autowired
    TableSpaceRepository tableSpaceRepository;

        public TableSpaceWarningCRC() {
    }

    public void setTableSpaceWarningCRC(HistoryUpload historyUpload) {
        this.historyUpload = historyUpload;
    }
    public void doTransData() {
        //TableSpace Data
        List<TableSpace> listTableSpace;
        listTableSpace = tableSpaceRepository.findByLogFileId(historyUpload.getLogFileId());
            for (int i = 0; i < listTableSpace.size(); i++) {
                TableSpaceWarningCreateTableData tableSpaceWarningCreateTableData = new TableSpaceWarningCreateTableData(listTableSpace.get(i),historyUpload.getLogFileId());
            }
    }
}

Я добавил много обозначений, но это не работает.Пожалуйста, помогите мне.Спасибо за чтение

1 Ответ

0 голосов
/ 12 апреля 2019

Ваш класс TableSpaceWarningCRC не похож на пружинный боб. Авто проводка работает только в классах с пружинным управлением.

Попробуйте добавить аннотацию @Component поверх класса TableSpaceWarningCRC, а затем создать экземпляр этого класса из контекста приложения вместо вызова конструктора.

Как получить бин с помощью контекста приложения при весенней загрузке

Также по умолчанию пружинные бобы являются синглетонами. Поэтому, если ваш класс имеет состояние или требует нескольких экземпляров, используйте область действия прототипа в определении компонента

https://www.baeldung.com/spring-inject-prototype-bean-into-singleton

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...