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

[Dúvida] Erro 500 Postman

Bom dia, ao subir minha aplicação no Postman, está surgindo um erro 500 de Erro Interno do Servidor. O erro acontece ao chamar o Get desse metodo listar/todos no meu Resource !!!! Obrigado.

2023-01-19 12:33:22.023 ERROR 8864 --- [0.1-8088-exec-4] o.h.engine.jdbc.spi.SqlExceptionHelper : ERROR: relation "procedimentocid" does not exist 2023-01-19 12:33:22.049 ERROR 8864 --- [0.1-8088-exec-4] o.a.c.c.C.[.[.[.[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [/smart-cre-api] threw exception [Request processing failed; nested exception is org.springframework.dao.InvalidDataAccessResourceUsageException: could not extract ResultSet; SQL [n/a]; nested exception is org.hibernate.exception.SQLGrammarException: could not extract ResultSet] with root cause

Repository Service

Resource

16 respostas

Oi Ighor, tudo bem?

Consegue disponiblizar seu projeto no Github e mandar o link por aqui? Caso não seja possível, você também pode zipar o código, subir no Drive e mandar o link aqui :)

Acredito que o erro esteja relacionado a algum mapeamento do SQL, como algum Join envolvendo ProcedimentoCid. Envia o projeto pra eu olhar melhor, por favor.

Boa Tarde, tudo otimo e você ? Acredito eu que errei mesmo no SQL !!! Vou está disponibilizando os print do meu banco de dados para ver se fica melhor na minha ajuda !!! Eu gostaria de fazer uma junção de tabelas nas seguintes tabelas abaixo !!!!

Seria uma junção no meu repositorio ProcedimentoCid envolvendo as duas tabelas abaixo : Procedimento e Cid !!! Na junção eu gostaria de selecionar somente alguns campos sendo eles Procedimento = Codigo / Descrição / Sexo / Idade Cid = Codigo / Descrição.

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Segue o código do meu Repository !!!


package br.com.vozdigital.smart.data.repository;

import java.util.List;

import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; import org.springframework.stereotype.Repository; import br.com.vozdigital.smart.core.entity.ProcedimentoCid;

@Repository public interface ProcedimentoCidRepository extends BaseRepository<ProcedimentoCid, Long> {

List<ProcedimentoCid> findByProcedimento_Id(@Param("id") Long id);

@Query(value = "select procedimento.codigo, procedimento.descricao, procedimento.sexo, procedimento.idade, cid.codigo, cid.descricao from Procedimento_Cid p", nativeQuery = true)
List<ProcedimentoCid> listarTodos();

}

Pode enviar suas classes Procedimento e Cid também? Pra eu ver como está juntando elas.

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Nunca trabalhei criando uma classe para fazer a junção. Geralmente, o que fazemos é mapear com anotações os atributos das duas classes, e o próprio spring já cria a nova entidade.

Por exemplo: um atributo do tipo Cid está na classe Procedimento, e eles têm relacionamento 1:1. Daí, a partir disso, usamos @OneToOne em uma classe e o JoinColumn em outra. Consegue me explicar como funciona o relacionamento entre as duas classes?

No caso a classe Cid e uma e Procedimento e outra, criei a classe ProcedimentoCid pra ligar entre as duas !!!!

Precisava mesmo era montar o SQL conforme a imagem do banco de dados pra fazer a junção das duas tabelas na classe de ProcedimentoCidRepository

Ahh, acho que entendi. E os campos código e descrição são campos em comum das duas tabelas, certo?

No caso seria tipo assim : Usar um SQL puxando os campos Procedimento = Codigo / Descrição / Sexo / Idade Cid = Codigo / Descrição para a tabela de ProcedimentoCid !!! Eu fiz um logo ai acima mas acho que errei nele em algo.

Acredito que o erro não esteja nessa parte, e sim no mapeamento. No caso, o java não reconhece que seu select é um ProcedimentoCid, inclusive acho que o select está correto.

Tenta mudar os JoinColumns:

@JoinColumn(name="proc_id", ...) e @JoinColumn(name="cid_id", ...). Pode ser que tenha a ver com a padronização do JPA ao juntar as tabelas.

O JoinColumn está de acordo com a Tabela de ProcedimentoCid do banco de dados, acredito que o problema não seja ai !!

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Oi Ighor!

Pelo que eu entendi você deseja fazer um relacionamento muito para muitos entre as tabelas procedimento e cid, certo? Ou seja, no seu sistema um procedimento pode ter vários cids e um mesmo cid pode estar relacionado a mais de um procedimento?

Olá Rodrigo, seria fazer uma JPQL, fazendo o metodo de junção de tabelas !!!! Tenho duas tabelas Procedimento e Cid, e gostaria de fazer o JPQL pra juntar elas na minha procedimentoCid !!!

Ex : select p.codigo, p.descricao, c.codigo, c.descricao from ProcedimentoCid p

Só não sei se funciona exatamente assim a sintaxe !

solução!

Se você deseja apenas trazer colunas específicas e não a entidade inteira, vai precisar utilizar o recurso de select new da JPA. No curso de JPA é ensinado a fazer isso para consultas de relatório: https://cursos.alura.com.br/course/java-jpa-consultas-avancadas-performance-modelos-complexos/task/89334

Muito Obrigado meu amigo !!! Um otimo resto de semana pra você!