Estou com o código exatamente igual o da aula 04.07 - Buscas por categoria
Estou tendo o seguinte erro:
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'screenmatchApplication': Unsatisfied dependency expressed through field 'repository': Error creating bean with name 'serieRepository' defined in br.com.pedropgaraujo.screenmatch.repository.SerieRepository defined in @EnableJpaRepositories declared on DataJpaRepositoriesRegistrar.EnableJpaRepositoriesConfiguration: No property 'finByGenero' found for type 'Serie'
O código nem inicia, na hora que executo ele já apresenta este erro e finaliza.
Segue as classes utilizadas:
SerieRepository.class
package br.com.pedropgaraujo.screenmatch.repository;
import br.com.pedropgaraujo.screenmatch.model.Categoria;
import br.com.pedropgaraujo.screenmatch.model.Serie;
import org.springframework.data.jpa.repository.JpaRepository;
import java.util.List;
import java.util.Optional;
public interface SerieRepository extends JpaRepository<Serie, Long> {
Optional<Serie> findByTituloContainingIgnoreCase(String serieName);
List<Serie> findByAtoresContainingIgnoreCaseAndAvaliacaoGreaterThanEqual(String authorName, Double rate);
List<Serie> findTop5ByOrderByAvaliacaoDesc();
List<Serie> finByGenero(Categoria categoria);
}
Serie.class
package br.com.pedropgaraujo.screenmatch.model;
import br.com.pedropgaraujo.screenmatch.service.ConsultaChatGPT;
import jakarta.persistence.*;
import java.util.ArrayList;
import java.util.List;
import java.util.OptionalDouble;
@Entity
@Table(name = "series")
public class Serie {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(unique = true)
private String titulo;
private Integer totalTemporadas;
@Enumerated(EnumType.STRING)
private Categoria genero;
private String atores;
private Double avaliacao;
private String sinopse;
private String poster;
@OneToMany(mappedBy = "serie", cascade = CascadeType.ALL, fetch = FetchType.EAGER)
private List<Episodio> episodioList = new ArrayList<>();
public Serie(){}
public List<Episodio> getEpisodioList() {
return episodioList;
}
public void setEpisodioList(List<Episodio> episodioList) {
episodioList.forEach(e -> e.setSerie(this));
this.episodioList = episodioList;
}
public Serie (DadosSerie dadosSerie){
this.titulo = dadosSerie.titulo();
this.totalTemporadas = dadosSerie.totalTemporadas();
this.avaliacao = OptionalDouble.of(Double.valueOf(dadosSerie.avaliacao())).orElse(0);
this.genero = Categoria.fromString(dadosSerie.genero().split(",")[0].trim());
this.atores = dadosSerie.atores();
this.poster = dadosSerie.poster();
this.sinopse = String.valueOf(ConsultaChatGPT.obterTraducao(dadosSerie.sinopse()));
}
//Getters and Setters
@Override
public String toString() {
return "Genero=" + genero +
", titulo='" + titulo + '\'' +
", totalTemporadas=" + totalTemporadas +
", atores='" + atores + '\'' +
", avaliacao=" + avaliacao +
", sinopse='" + sinopse + '\'' +
", poster='" + poster + '\'' +
", episodios='" + episodioList + '\'' +
'}';
}
}
Categoria.class
package br.com.pedropgaraujo.screenmatch.model;
public enum Categoria {
ACAO("Action", "Ação"),
ROMANCE("Romance", "Romance"),
COMEDIA("Comedy", "Comédia"),
DRAMA("Drama", "Drama"),
CRIME("Crime", "Crime");
private String categoriaOmdb;
private String categoriaPortugues;
Categoria(String categoriaOmdb, String categoriaPortugues){
this.categoriaOmdb = categoriaOmdb;
this.categoriaPortugues = categoriaPortugues;
}
public static Categoria fromPortugues(String text) {
for (Categoria categoria : Categoria.values()) {
if (categoria.categoriaPortugues.equalsIgnoreCase(text)) {
return categoria;
}
}
throw new IllegalArgumentException("Nenhuma categoria encontrada para a string fornecida: " + text);
}
}
Na classe principal tem um menu usando switch case, que selecionando a opção 7, chama este metodo abaixo.
Principal.class
private void buscarSeriePorCategoria() {
System.out.println("Deseja buscar séries de qual gênero?");
var genderName = scan.nextLine();
Categoria categoria = Categoria.fromPortugues(genderName);
List<Serie> seriesPorCategoria = repository.finByGenero(categoria);
System.out.println("Séries da categoria " + genderName);
seriesPorCategoria.forEach(System.out::println);
}