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

[Bug] Erro JpaBaseConfiguration$JpaWebConfiguration

Boa noite o meu spring está dando o erro abaixo logo depois que criei a interface repository

JpaBaseConfiguration$JpaWebConfiguration : spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning

Poderia me ajudar por favor?

Caso precise ver o meu projeto segue o link do repositório https://github.com/Rita-C-Carvalho/api

Muito obrigada.

3 respostas

Olá, Rita!

Confira esse tópico do fórum, acredito que irá te ajudar no seu problema: https://cursos.alura.com.br/forum/topico-erro-ao-executar-o-projeto-spring-jpa-open-in-view-is-enabled-by-default-therefore-database-queries-may-be-performed-during-view-rendering-196452

solução!

Olá! Tudo bem? Para resolver esse problema, você só precisa adicionar a seguinte linha no seu application.properties:

spring.jpa.open-in-view=false

Por padrão o Spring vem com essa configuração ativada e o que ela faz é habilitar o modelo OSIV do banco de dados, esse modelo se chama Open Session in View e o que ele faz é manter uma sessão (conexão com o banco de dados) ativa sempre que uma View (página web) é renderizada pelo Spring, o objetivo dessa configuração é fazer com que a Interface do Usuário possa interagir com o banco de dados e realizar transações de forma mais dinâmica e performática. O problema é que essa configuração faz com que sessões com o banco de dados fiquem ativas por mais tempo e às vezes de forma desnecessária, podendo ser um problema se vários usuários estiverem utilizando a aplicação ao mesmo tempo, já que o banco de dados pode ser sobrecarregado e assim outros usuários não vão conseguir se conectar por não terem mais "vagas" disponíveis.


Sem o modelo OSIV, a sessão com o banco de dados só seria aberta quando necessário e depois fechada, o que pode deixar a interação do usuário com a interface mais lenta, então o modelo OSIV deixa uma sessão aberta sempre que a página estiver sendo renderizada pelo Spring. No caso de uma API REST, o comportamento que queremos é justamente abrir uma sessão quando o usuário mandar uma requisição e depois fechar.


No caso do curso, estamos desenvolvendo uma API REST, que não usa páginas WEB nem nehuma interface com o usuário, então esse modelo OSIV se torna inútil. Além disso, essa configuração só causa um Warning (aviso), pois ela vem ativada por padrão então o Spring só tenta avisar que ela está ativada mesmo sem nenhuma configuração no application.properties. Para remover esse aviso você poderia também colocar essa propriedade spring.jpa.open-in-view=true, já que você estaria deixando explícito que quer usar o modelo OSIV, mas no nosso caso, podemos deixar como false mesmo já que não se encaixa com o tipo de aplicação que estamos desenvolvendo. Espero ter ajudado!

Muito obrigada gente, coloquei spring.jpa.open-in-view=false no arquivo properties como o Breno disse e deu certo.

Muito obrigada mesmo.