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

Erro CRUD Pacientes com H2

Acabei marcando o tópico anterior como concluído sem querer (Mybad hahah) Reformulando...

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?

2 respostas

Oi!

Esse application-test.properties so vai ser utilizado com a execução dos testes automatizados.

Rodando a aplicação normalmente (via classe ApiApplication) o Spring vai carregar o application.properties

solução!

No meu application.properties eu fiz da seguinte maneira:

spring.profiles.active=${APP_PROFILE:test}
spring.jpa.open-in-view=false

cors.origins=${CORS_ORIGINS:http://localhost:5173,http://localhost:3000}

Dessa forma, basta alterar o apelido depois do "APP_PROFILE:" para carregar o application.properties desejado.

Solucionei o problema da seguinte forma: Rodei a aplicação no application-dev.properties (banco MySQL) e criei as tabelas pelas migrations. Com a tabela já criada, ao rodar novamente a aplicação no application-test.properties (banco H2), ele já detectava a tabela "pacientes" e só fazia popular esta tabela.

Não sei se foi o mais adequado, porém funcionou ;)