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

Curso FindByNome

Eu estou seguindo o curso, fazendo as mesmas coisas que o instrutor, e encontrei algo estranho, na hora de gravar meu topico no BD, ele não coloca o id do curso, isso pq o curso que o Metodo "findByNome" retorna não tem um Id(eu usei o getId() pra ver e deu nullPointer), isso é normal?

minhas classes:

package br.com.alura.forum.model;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

@Entity
public class Curso {


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


    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + ((id == null) ? 0 : id.hashCode());
        return result;
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        Curso other = (Curso) obj;
        if (id == null) {
            if (other.id != null)
                return false;
        } else if (!id.equals(other.id))
            return false;
        return true;
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public String getCategoria() {
        return categoria;
    }

    public void setCategoria(String categoria) {
        this.categoria = categoria;
    }

}
package br.com.alura.forum.controllers.form;

import br.com.alura.forum.model.Curso;
import br.com.alura.forum.model.Topico;
import br.com.alura.forum.repository.CursoRepository;

public class TopicoForm {

    private String titulo;

    private String mensagem;

    private String nomeCurso;



    public TopicoForm( ) {

    }

    public String getTitulo() {
        return titulo;
    }
    public void setTitulo(String titulo) {
        this.titulo = titulo;
    }
    public String getMensagem() {
        return mensagem;
    }
    public void setMensagem(String mensagem) {
        this.mensagem = mensagem;
    }
    public String getCurso() {
        return nomeCurso;
    }
    public void setCurso(String curso) {
        this.nomeCurso = curso;
    }
    public Topico convertToTopico(CursoRepository repository) {
        Curso curso = repository.findByNome(this.nomeCurso);

        return new Topico(this.titulo,this.mensagem,curso);
    }

}
package br.com.alura.forum.repository;

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

import br.com.alura.forum.model.Curso;

public interface CursoRepository extends JpaRepository<Curso, Long>{
    Curso findByNome(String nomeCurso);
}
2 respostas
solução!

Oi Vinicius,

Aparentemente seu código está correto.

A única coisa que notei foi na sua classe TopicoForm que o atributo se chama nomeCurso, mas o getter/setter está como curso.

Talvez então esteja chegando null o nome do curso e com isso o método findByNome retorna null ao pesquisar o curso no banco de dados.

Dá uma verificada nisso.

Era isso mesmo, eu já tinha notado em algum outro ponto que ao refatorar o nome de um atributo, ele nao muda o nome do getter e do setter, aí tava dando um comportamento estranho, mas o spring nao dá erro e muito menos o compilador haha

Valeu, Rodrigo!