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

Erro ao fazer consulta com filtros

Oie! Tive o seguinte erro:

Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.orm.jpa.JpaSystemException: No default constructor for entity: : br.com.alura.forum2021.modelo.Topico; nested exception is org.hibernate.InstantiationException: No default constructor for entity: : br.com.alura.forum2021.modelo.Topico] with root cause

4 respostas

package br.com.alura.forum2021.controller;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController;

import br.com.alura.forum2021.controller.dto.TopicoDto; import br.com.alura.forum2021.modelo.Topico; import br.com.alura.forum2021.repository.TopicoRepository;

@RestController public class TopicosController {

@Autowired
private TopicoRepository topicoRepository;


@RequestMapping("/topicos")
public List<TopicoDto>  lista(String nomeCurso) {
    if (nomeCurso == null) {

        List<Topico> topicos = topicoRepository.findAll();
        return TopicoDto.converter(topicos);

    } else {

        List<Topico> topicos = topicoRepository.findByCursoNome(nomeCurso);    
        return TopicoDto.converter(topicos);

    }


}

}

package br.com.alura.forum2021.repository;

import java.util.List;

import org.springframework.data.jpa.repository.JpaRepository;

import br.com.alura.forum2021.modelo.Topico;

public interface TopicoRepository extends JpaRepository<Topico, Long> {

    List<Topico> findByCursoNome(String nomeCurso);

}

Deu certo depois de tirar esses construtores das classes

public Curso(String nome, String categoria) { this.nome = nome; this.categoria = categoria; }


public Topico(String titulo, String mensagem, Curso curso) { this.titulo = titulo; this.mensagem = mensagem; this.curso = curso;

solução!

Oi Deborah,

Na verdade você não precisa remover tais construtores, apenas adicionar também o contrutor default na classe, pois isso é uma exigência da JPA:

@Entity
public class Curso {

    @Id @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String nome;
    private String categoria;

    public Curso() {
    }

    public Curso(String nome, String categoria) { 
        this.nome = nome;
        this.categoria = categoria; 
    }

    //resto do codigo...