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

Erro CRUD Pacientes

Professor, boa tarde! Criei um perfil de teste no application.properties e adicionei o banco H2 em minhas dependencias. O application-test.properties está da seguinte maneira:

# H2 Conexão
spring.datasource.url=jdbc:h2:mem:testdb?
#spring.datasource.url=jdbc:h2:file:/Users/XX/XX/XX/XX/src/main/resources/data/employees;AUTO_SERVER=true
spring.datasource.username=sa
spring.datasource.password=

# H2 Client
spring.h2.console.enabled=true
spring.h2.console.path=/h2-console


# Show SQL
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.format_sql=true

#Este comando vai imprimir os comandos SQL que serão dados no banco de dados
spring.jpa.show-sql=true
#Este comando vai formatar, para uma melhor visualização, dos comandos SQL
spring.jpa.properties.hibernate.format_sql=true

#Esses códigos irão trocar o nome dos parâmetros do nosso "Page<>"
spring.data.web.pageable.page-parameter=pagina
spring.data.web.pageable.size-parameter=tamanho
spring.data.web.sort.sort-parameter=ordem

Ao rodar a aplicação e tentar disparar uma requisição do tipo POST, para cadastrar um paciente, eu recebo erro código 500 do postman.

Para melhor elucidação do meu problema, segue o erro na IDE:

Hibernate: 
    insert 
    into
        pacientes
        (id, ativo, cpf, email, bairro, cep, cidade, complemento, logradouro, numero, uf, nome, plano, telefone) 
    values
        (default, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
2023-07-19T13:15:19.147-03:00  WARN 19548 --- [nio-8080-exec-1] o.h.engine.jdbc.spi.SqlExceptionHelper   : SQL Error: 42102, SQLState: 42S02
2023-07-19T13:15:19.147-03:00 ERROR 19548 --- [nio-8080-exec-1] o.h.engine.jdbc.spi.SqlExceptionHelper   : Table "PACIENTES" not found; SQL statement:
insert into pacientes (id, ativo, cpf, email, bairro, cep, cidade, complemento, logradouro, numero, uf, nome, plano, telefone) values (default, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) [42102-214]
2023-07-19T13:15:19.154-03:00 ERROR 19548 --- [nio-8080-exec-1] o.a.c.c.C.[.[.[/].[dispatcherServlet]    : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed: org.springframework.dao.InvalidDataAccessResourceUsageException: could not prepare statement; SQL [insert into pacientes (id, ativo, cpf, email, bairro, cep, cidade, complemento, logradouro, numero, uf, nome, plano, telefone) values (default, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)]] with root cause

org.h2.jdbc.JdbcSQLSyntaxErrorException: Table "PACIENTES" not found; SQL statement:

É como se o banco H2 não estivesse conseguindo criar a tabela de pacientes... Pode me ajudar por favor?

4 respostas

Oi!

Você rodou um teste automatizado e aconteceu esse erro ou rodou a aplicação e disparou a requisição post manualmente?

Rodei a aplicação e funcionou sem erros. Ao disparar a requisição no postman manualmente, obtive este erro.

solução!

Professor, outra coisa que notei é que ao rodar a aplicação no perfil de dev (banco de dados MySQL) e enviando a mesma requisição (Cadastro de pacientes) eu obtenho o seguinte erro:

Hibernate: 
    insert 
    into
        pacientes
        (ativo, cpf, email, bairro, cep, cidade, complemento, logradouro, numero, uf, nome, plano, telefone) 
    values
        (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
2023-07-19T14:04:39.192-03:00  WARN 8740 --- [nio-8080-exec-4] o.h.engine.jdbc.spi.SqlExceptionHelper   : SQL Error: 1048, SQLState: 23000
2023-07-19T14:04:39.193-03:00 ERROR 8740 --- [nio-8080-exec-4] o.h.engine.jdbc.spi.SqlExceptionHelper   : Column 'plano' cannot be null
2023-07-19T14:04:39.194-03:00 ERROR 8740 --- [nio-8080-exec-4] o.a.c.c.C.[.[.[/].[dispatcherServlet]    : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed: org.springframework.dao.DataIntegrityViolationException: could not execute statement; SQL [n/a]; constraint [null]] with root cause

java.sql.SQLIntegrityConstraintViolationException: Column 'plano' cannot be null

Requisição:

{
  "nome": "test",
  "email": "test@gmail.com",
  "telefone": "(83)98601-0774",
  "cpf": "1338",
  "plano": "GOLD",
  "endereco": {
    "logradouro": "Rua Vereador Gumercindo Barbosa Dunda",
    "bairro": "Aeroclube",
    "cep": "58036850",
    "cidade": "João Pessoa",
    "uf": "PB",
    "numero": "378"
  }
}

Não entendo o porque que ele reclama do "plano" ser NULL

Resolvi o erro do perfil do MySQL!

Solução -> Não havia inicializado o plano do paciente no construtor. Apenas adicionei this.plano = cadastroPaciente.plano() e funcionou!

Resta apenas o erro do H2, que não consegui solucionar.