Pessoal, tudo bom?
Estou tentando criar um metodo Post (Cadastrar) que recebe uma requisição e persiste uma classe tópico no banco de dados, porém não estou conseguindo evoluir por conta do erro abaixo.
org.hibernate.TransientPropertyValueException: object references an unsaved transient instance - save the transient instance before flushing : br.com.alura.forum.modelo.Topico.autor -> br.com.alura.forum.modelo.Usuario
Segue código fonte: https://gitlab.com/weslfra/curso-kotlin/-/tree/feature-boo-erro
package br.com.alura.forum.controller
import br.com.alura.forum.controller.dto.TopicoDto
import br.com.alura.forum.controller.form.TopicoRequest
import br.com.alura.forum.modelo.Curso
import br.com.alura.forum.modelo.Topico
import br.com.alura.forum.repository.CursoRepository
import br.com.alura.forum.repository.TopicoRepository
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.http.ResponseEntity
import org.springframework.web.bind.annotation.*
import org.springframework.web.util.UriComponentsBuilder
import java.net.URI
@RestController
@RequestMapping("/topicos")
class TopicosController {
@Autowired
lateinit var topicoRepository: TopicoRepository
@Autowired
lateinit var cursoRepository: CursoRepository
@GetMapping("/topicoMemoria")
fun listaMemoria(): List<TopicoDto> {
val topico = Topico(
titulo = "Alura ",
mensagem = "Meu primeiro Curso",
curso = Curso(
nome = "spring boot 1",
categoria = "Programcao"
)
)
return TopicoDto.converter(listOf(topico, topico, topico))
}
@GetMapping
fun lista(nomeCurso: String?): List<TopicoDto> {
if (nomeCurso == null) {
val topicos: List<Topico> = topicoRepository.findAll()
return TopicoDto.converter(topicos)
} else {
val topicos: List<Topico> = topicoRepository.findByCursoNome(nomeCurso)
return TopicoDto.converter(topicos)
}
}
@PostMapping
fun cadastrar(
@RequestBody request: TopicoRequest,
uriBuilder: UriComponentsBuilder
): ResponseEntity<TopicoDto> {
val topico: Topico = request.converter(cursoRepository)
topicoRepository.save(topico)
var uri: URI = uriBuilder.path("/topicos/{id}").buildAndExpand(topico.id).toUri()
return ResponseEntity.created(uri).body(TopicoDto(topico))
}
}