Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

this.categriaRepository is null no desafio "gerenciador_pedidos"

Bom dia.

Não estou conseguindo compilar o meu projeto devido ao erro "this.categriaRepository is null ".
Alguém poderia me ajudar ?

O meu projeto "gerenciador_pedidos" estão no git "ttps://github.com/Adelmo2/gerenciador-pedidos.git".
Obrigado.

Logs apresentado no compilador:
Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled.
2025-10-01T08:38:35.140-03:00 ERROR 16820 --- [ main] o.s.boot.SpringApplication : Application run failed

java.lang.IllegalStateException: Failed to execute CommandLineRunner
at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:774) ~[spring-boot-3.1.1.jar:3.1.1]
at org.springframework.boot.SpringApplication.callRunners(SpringApplication.java:755) ~[spring-boot-3.1.1.jar:3.1.1]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:319) ~[spring-boot-3.1.1.jar:3.1.1]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1306) ~[spring-boot-3.1.1.jar:3.1.1]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1295) ~[spring-boot-3.1.1.jar:3.1.1]
at br.com.alura.gerenciador_pedidos.GerenciadorPedidosApplication.main(GerenciadorPedidosApplication.java:26) ~[classes/:na]
Caused by: java.lang.NullPointerException: Cannot invoke "br.com.alura.gerenciador_pedidos.repository.CategoriaRepository.saveAll(java.lang.Iterable)" because "this.categoriaRepository" is null
at br.com.alura.gerenciador_pedidos.principal.Principal.principal(Principal.java:88) ~[classes/:na]
at br.com.alura.gerenciador_pedidos.GerenciadorPedidosApplication.run(GerenciadorPedidosApplication.java:35) ~[classes/:na]
at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:771) ~[spring-boot-3.1.1.jar:3.1.1]
... 5 common frames omitted

Garanta sua matrícula hoje e ganhe + 2 meses grátis

Continue sua jornada tech com ainda mais tempo para aprender e evoluir

Quero aproveitar agora
4 respostas

Bom dia, Adelmo! Tudo bem?

Vamos lá, analisei o seu projeto e verifiquei alguns pontos que estavam impedindo dele rodar corretamente.

  1. Sobre o erro que aparece no seu post, ele acontece porque a classe Principal acaba não sendo reconhecida corretamente pelo Spring apenas sendo declarada dentro da função run, sendo necessário fazer um construtor receber essa classe criando a instância dela. Segue o código:

    @SpringBootApplication
    public class GerenciadorPedidosApplication implements CommandLineRunner {
    
        private final Principal principal;
    
        public GerenciadorPedidosApplication(Principal principal) {
            this.principal = principal;
        }
    
        public static void main(String[] args) {
            SpringApplication.run(GerenciadorPedidosApplication.class, args);
        }
    
        @Override
        public void run(String... args) {
            principal.principal();
        }
    }
    
  2. Agora com esse ponto resolvido, precisamos falarmos sobre os construtores das classes Categoria e Produto. Quando não declaramos um construtor numa classe, o Java por padrão estabelece um construtor vazio por debaixo dos panos, mas, como você declarou um construtor em ambas as classes, para o Spring, é necessário haver também um construtor vazio. Então crie um para cada classe citada.

  3. Por fim, na sua classe Principal, mais especificamente no método principal é necessário adicionar a annotation @Transactional em cima desse método, pois como foi estabelecido o relacionamento de Categoria com Produto precisa dessa annotation para buscar/salvar as informações corretamente no banco.

    @Transactional
    public void principal() {
        
        // código omitido
    

Ao finalizar esses 3 passos o seu projeto deve rodar sem maiores problemas.

Espero ter ajudado e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.

Bom dia Armando,

Fiz a 3 etapas (dicas) que Você me passou e ficou resolvido a questão da mensagem "this.categoriaRepository is null".
Muito obrigado pelo suporte.

Estou tentando revolver o próssimo erro que surgiu:

Description:
Parameter 0 of constructor in br.com.alura.gerenciador_pedidos.GerenciadorPedidosApplication required a bean of type 'br.com.alura.gerenciador_pedidos.principal.Principal' that could not be found.
Action:
Consider defining a bean of type 'br.com.alura.gerenciador_pedidos.principal.Principal' in your configuration.

Fiz várias tentativas inclusive colocando o @Autowirred nos construtores vazios e @Component na classe "Principal" mas, o erro ainda persiste.
Talvez seja algo simples mas, é novidade para mim por ser iniciante em JPA no Spring Boot.

Atualizei o projeto as com dicas citadas no meu Git "https://github.com/Adelmo2/gerenciador-pedidos.git"

solução!

Boa tarde, Adelmo! Tudo bem?

Tem dois problemas nessa versão atual do seu projeto que se envolvem entre si para gerar o problema em questão.

Primeiro, no arquivo "GerenciadorPedidosApplication", você vai apenas usar a variável que você definiu em private final Principal principal no método run chamando a função principal, não precisa criar uma nova instância de Principal. Código do arquivo deve ficar assim:

package br.com.alura.gerenciador_pedidos;

import br.com.alura.gerenciador_pedidos.principal.Principal;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class GerenciadorPedidosApplication implements CommandLineRunner {

    private final Principal principal;

    public GerenciadorPedidosApplication(Principal principal) {
        this.principal = principal;
    }

    public static void main(String[] args) {
        SpringApplication.run(GerenciadorPedidosApplication.class, args);
    }

    @Override
    public void run(String... args) throws Exception {
        principal.principal();
    }
}

Com isso resolvido, vamos para o gerador do problema principal. Você havia comentado a annotation @Component que estava sobre a classe Principal e isso acabou causando o erro que você enviou, já que essa classe realiza diversas operações necessárias para o Spring Boot/Java, mas não apresentava essa annotation necessário para carregar a autoconfiguração do Spring Boot.

Resumindo, descomente a annotation:

@Component
public class Principal {
    // código omitido

Fico a disposição em caso de outro problemas!

Armando,
Funcionou perfeitamente.
Muito Obrigado!