Репозиторий с автопроводкой, возвращающий ноль - PullRequest
0 голосов
/ 10 июля 2019

Я хочу сделать приложение с загрузкой Spring на бэкэнде и Swing на фронтэнде. Мне нужно использовать репозиторий, автоматически подключенный к моему классу обслуживания, как это сделать, когда мне нужно создать экземпляр класса обслуживания?

Я уже пытался изменить хранилище на BeanFactory, пытался изменить расположение файлов, но я не могу сбежать! Мне нужно создать экземпляр класса Service, и autowired не работает с этим.

У меня есть модель под названием Permission. Репозиторий (PermissionRepository.java):

@Repository
public interface PermissionRepository extends JpaRepository<Permission, Long>{
    Optional<Permission> findByDescription(String description);    
}

Сервис (PermissionService.java):

@Autowired
BeanFactory beanFactory;

public List<Permission> loadAll() {
 return this.beanFactory.getBean(PermissionRepository.class).findAll();
}

Использование (BasicOperations.java):

public static void initialPermission() {
 try {
    if (new PermissionService().loadAll().isEmpty()) {
    //logics
    }
  } catch(Exception e) {
    ...
  }
}  

Я ожидаю List, java.util.List, но ошибка - nullPointer в моем автонастроенном хранилище Стек:

Исключение в потоке "AWT-EventQueue-0" java.lang.NullPointerException на com.riTrap.service.PermissionService.loadAll (PermissionService.java:20)

1 Ответ

0 голосов
/ 13 июля 2019

Вы должны использовать autowired вместо нового PermissionService. Вы используете loadAll, чтобы проверить, содержит ли база данных элементы. Если база данных большая, такой подход может повредить ваше приложение. Предложение: используйте счет вместо

@Service
public class PermissionService {

    @Autowired
    PermissionRepository permissionRepository;

    public List<Permission> loadAll() {
        return permissionRepository.findAll();
    }

    public boolean isEmpty() {
        return permissionRepository.count() == 0L;
    }
}

Если вам нужно инициализировать компонент перед использованием, вы можете использовать конструктор:

@Service
public class BasicOperations {

    @Autowired
    public BasicOperations(PermissionService permissionService){
        if(permissionService.isEmpty()){
            //DO STUFF
        }
    }
}
...