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

Erro Unsatisfied dependency

Estou desenvolvendo um projeto semelhante ao daqui do curso e está apresentando o seguinte erro:

org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'cafeCocoController': Unsatisfied dependency expressed through field 'cafe_coco': Error creating bean with name 'cafe_CocoRepository' defined in com.minascafe.api.repositories.Cafe_CocoRepository defined in @EnableJpaRepositories declared on JpaRepositoriesRegistrar.EnableJpaRepositoriesConfiguration: Could not create query for public abstract void com.minascafe.api.repositories.Cafe_CocoRepository.atualizarInformacoes(com.minascafe.api.record.DadosAtualizacaoCafeCoco); Reason: Failed to create query for method public abstract void com.minascafe.api.repositories.Cafe_CocoRepository.atualizarInformacoes(com.minascafe.api.record.DadosAtualizacaoCafeCoco); No property 'atualizarInformacoes' found for type 'Cafe_Coco'
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.resolveFieldValue(AutowiredAnnotationBeanPostProcessor.java:713) ~[spring-beans-6.0.7.jar:6.0.7]
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:693) ~[spring-beans-6.0.7.jar:6.0.7]
    at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:133) ~[spring-beans-6.0.7.jar:6.0.7]
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties(AutowiredAnnotationBeanPostProcessor.java:482) ~[spring-beans-6.0.7.jar:6.0.7]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1416) ~[spring-beans-6.0.7.jar:6.0.7]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:597) ~[spring-beans-6.0.7.jar:6.0.7]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:520) ~[spring-beans-6.0.7.jar:6.0.7]
    at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) ~[spring-beans-6.0.7.jar:6.0.7]
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-6.0.7.jar:6.0.7]
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) ~[spring-beans-6.0.7.jar:6.0.7]
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) ~[spring-beans-6.0.7.jar:6.0.7]
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:973) ~[spring-beans-6.0.7.jar:6.0.7]
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:917) ~[spring-context-6.0.7.jar:6.0.7]
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) ~[spring-context-6.0.7.jar:6.0.7]
    at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146) ~[spring-boot-3.0.5.jar:3.0.5]
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) ~[spring-boot-3.0.5.jar:3.0.5]
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'cafe_CocoRepository' defined in com.minascafe.api.repositories.Cafe_CocoRepository defined in @EnableJpaRepositories declared on JpaRepositoriesRegistrar.EnableJpaRepositoriesConfiguration: Could not create query for public abstract void com.minascafe.api.repositories.Cafe_CocoRepository.atualizarInformacoes(com.minascafe.api.record.DadosAtualizacaoCafeCoco); Reason: Failed to create query for method public abstract void com.minascafe.api.repositories.Cafe_CocoRepository.atualizarInformacoes(com.minascafe.api.record.DadosAtualizacaoCafeCoco); No property 'atualizarInformacoes' found for type 'Cafe_Coco'

Help me, please!

3 respostas

A referida classe Cafe_Coco_Controler:

package com.minascafe.api.controllers;

import com.minascafe.api.entities.Cafe_Coco;
import com.minascafe.api.record.DadosAtualizacaoCafeCoco;
import com.minascafe.api.record.DadosCadastroCafeCoco;
import com.minascafe.api.record.DadosListagemCafeCoco;
import com.minascafe.api.repositories.Cafe_CocoRepository;
import jakarta.validation.Valid;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;

@RestController//Endpoint (página web) de Controller
@RequestMapping("cafecoco") //Define a url da classe
public class CafeCocoController {

    public static final Logger log = LoggerFactory.getLogger(CafeCocoController.class);

    @Autowired
    private Cafe_CocoRepository cafe_coco; //Injetando o Repository como sendo um atributo

    @PostMapping
    @Transactional//Unidade de trabalho isolada que leva o banco de dados de um estado consistente a outro estado consistente
    public void cadastrar(@RequestBody @Valid DadosCadastroCafeCoco cc){ //RequestBody = Busca do corpo da requisição
        cafe_coco.save(new Cafe_Coco(cc)); //Salva um novo objeto entidade JPA do tipo Cafe_Coco passando os
        // parâmetros que vêm do Json da requisição no construtor da Entidade Cafe_Coco

        System.out.print("Lote de café em côco salvo no banco com sucesso!");
    }

    @GetMapping
    public Page<DadosListagemCafeCoco> listar(Pageable paginacao){//Devolve uma lista de Café em Côco e informações sobre a paginação. É apenas leitura, não precisa da anotação @Transactional
      return cafe_coco.findAll(paginacao).map(DadosListagemCafeCoco::new);//map = Mapeamento. Converte uma lista de Cafe_Coco para uma lista de DadosListagemCafeCoco. stream() = controle de fluxo de dados. Abstração para expressar operações eficientes do estilo SQL em relação a uma coleção de dados
        //.toList() = converte para uma lista
        // cafe_coco.findAll devolve uma lista de cafe_coco e o retorno do método é uma lista de DadosListagemCafeCoco (é um Dto)
    }

    @GetMapping("/{lote}")
    public ResponseEntity<Cafe_Coco> ok(@PathVariable("lote") int lote){//No PathVariable o parâmetro é passado diretamente no corpo da requisição e esse valor faz parte do corpo da requisição
       Cafe_Coco cafeCoco = new Cafe_Coco();
        return ResponseEntity
                .status(HttpStatus.ACCEPTED)
                .body(cafeCoco);
    }

    @PutMapping //
    @Transactional //Para fazer escrita no banco de dados de forma efetiva
    public void atualizar(@RequestBody @Valid DadosAtualizacaoCafeCoco da){
       var cafe = cafe_coco.getReferenceById(da.lote()); //Carrega o cadastro do café em coco pelo lote que está vindo pelo DTO
       cafe.atualizarInformacoes(da); //Chama os métodos para atualizar os dados baseado no DTO
    }
}
solução!

Oi Edson!

O erro indica que você criou o método atualizarInformacoes na interface repository, sendo que na verdade esse método deveria estar na entidade Cafe_Coco.

Obs: como sugestão recomendo você utilizar os padrões de nomenclatura do Java, utilizando o padrão CamelCase no nome das classes.

Ok Rodrigo, vou verificar aqui.

Desde já muito obrigado!