1
resposta

[Dúvida] Erro [Transaction silently rolled back because it has been marked as rollback-only]

Boa tarde #AluraTeam

Estou estudando a parte de apis com integração ao banco de dados, e ao criar minha api do zero, estou tendo este erro ao tentar chamar meu endpoint de cadastro.

Podem me ajudar?

Segue o repositorio = https://github.com/fahpsouza/cooffebreak

http://localhost:8081/cadastrar-produto

{ "nome": "Pao de Queijo", "tipoProduto": "Comida", "valor": 8.80 }

2024-05-07T09:25:56.380-03:00  INFO 4400 --- [  restartedMain] org.flywaydb.core.FlywayExecutor         : Database: jdbc:mysql://localhost/coofeebreak (MySQL 8.0)
2024-05-07T09:25:56.408-03:00  INFO 4400 --- [  restartedMain] o.f.core.internal.command.DbValidate     : Successfully validated 0 migrations (execution time 00:00.010s)
2024-05-07T09:25:56.408-03:00  WARN 4400 --- [  restartedMain] o.f.core.internal.command.DbValidate     : No migrations found. Are your locations set up correctly?
2024-05-07T09:25:56.419-03:00  INFO 4400 --- [  restartedMain] o.f.core.internal.command.DbMigrate      : Current version of schema `coofeebreak`: << Empty Schema >>
2024-05-07T09:25:56.421-03:00  INFO 4400 --- [  restartedMain] o.f.core.internal.command.DbMigrate      : Schema `coofeebreak` is up to date. No migration necessary.
2024-05-07T09:25:56.493-03:00  INFO 4400 --- [  restartedMain] o.hibernate.jpa.internal.util.LogHelper  : HHH000204: Processing PersistenceUnitInfo [name: default]
2024-05-07T09:25:56.560-03:00  INFO 4400 --- [  restartedMain] org.hibernate.Version                    : HHH000412: Hibernate ORM core version 6.4.4.Final
2024-05-07T09:25:56.605-03:00  INFO 4400 --- [  restartedMain] o.h.c.internal.RegionFactoryInitiator    : HHH000026: Second-level cache disabled
2024-05-07T09:25:56.796-03:00  INFO 4400 --- [  restartedMain] o.s.o.j.p.SpringPersistenceUnitInfo      : No LoadTimeWeaver setup: ignoring JPA class transformer
2024-05-07T09:25:57.487-03:00  INFO 4400 --- [  restartedMain] o.h.e.t.j.p.i.JtaPlatformInitiator       : HHH000489: No JTA platform available (set 'hibernate.transaction.jta.platform' to enable JTA platform integration)
2024-05-07T09:25:57.489-03:00  INFO 4400 --- [  restartedMain] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default'
2024-05-07T09:25:57.755-03:00  WARN 4400 --- [  restartedMain] 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
2024-05-07T09:25:58.038-03:00  INFO 4400 --- [  restartedMain] o.s.b.d.a.OptionalLiveReloadServer       : LiveReload server is running on port 35729
2024-05-07T09:25:58.069-03:00  INFO 4400 --- [  restartedMain] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port 8081 (http) with context path ''
2024-05-07T09:25:58.076-03:00  INFO 4400 --- [  restartedMain] b.com.loja.cooffebreak.LojaApplication   : Started LojaApplication in 3.57 seconds (process running for 4.121)
2024-05-07T09:26:10.176-03:00  INFO 4400 --- [nio-8081-exec-4] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring DispatcherServlet 'dispatcherServlet'
2024-05-07T09:26:10.176-03:00  INFO 4400 --- [nio-8081-exec-4] o.s.web.servlet.DispatcherServlet        : Initializing Servlet 'dispatcherServlet'
2024-05-07T09:26:10.177-03:00  INFO 4400 --- [nio-8081-exec-4] o.s.web.servlet.DispatcherServlet        : Completed initialization in 1 ms
2024-05-07T09:26:10.458-03:00  WARN 4400 --- [nio-8081-exec-4] o.h.engine.jdbc.spi.SqlExceptionHelper   : SQL Error: 1146, SQLState: 42S02
2024-05-07T09:26:10.458-03:00 ERROR 4400 --- [nio-8081-exec-4] o.h.engine.jdbc.spi.SqlExceptionHelper   : Table 'coofeebreak.produtos' doesn't exist
2024-05-07T09:26:10.470-03:00 ERROR 4400 --- [nio-8081-exec-4] o.a.c.c.C.[.[.[/].[dispatcherServlet]    : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed: org.springframework.transaction.UnexpectedRollbackException: Transaction silently rolled back because it has been marked as rollback-only] with root cause

org.springframework.transaction.UnexpectedRollbackException: Transaction silently rolled back because it has been marked as rollback-only
   at org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:803) ~[spring-tx-6.1.6.jar:6.1.6]
   at org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:757) ~[spring-tx-6.1.6.jar:6.1.6]
   at org.springframework.transaction.interceptor.TransactionAspectSupport.commitTransactionAfterReturning(TransactionAspectSupport.java:676) ~[spring-tx-6.1.6.jar:6.1.6]
   at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:426) ~[spring-tx-6.1.6.jar:6.1.6]
1 resposta

Olá, Fabio! Tudo bem?

Observando o log do seu servidor, parece que o problema está relacionado com a ausência da tabela produtos no seu banco de dados coofeebreak. O erro Table 'coofeebreak.produtos' doesn't exist indica que quando a aplicação tentou acessar essa tabela, ela não foi encontrada.

Para resolver esse problema, você precisa garantir que a tabela produtos esteja criada no seu banco de dados. Isso normalmente é feito através de migrações de banco de dados. No seu log, também notei uma mensagem indicando que não foram encontradas migrações: No migrations found. Are your locations set up correctly?. Isso sugere que o Flyway, a ferramenta que você está usando para gerenciar as migrações do banco de dados, não conseguiu encontrar os scripts de migração.

Aqui estão alguns passos que você pode seguir para resolver o problema:

  1. Verifique os scripts de migração: Confira se os arquivos de migração estão no diretório correto que o Flyway está configurado para buscar. Normalmente, eles ficam em src/main/resources/db/migration.

  2. Crie o script de migração: Se você ainda não tem um script de migração para criar a tabela produtos, você precisará criar um. Um exemplo de script SQL para criar essa tabela seria:

    CREATE TABLE produtos (
        id INT AUTO_INCREMENT PRIMARY KEY,
        nome VARCHAR(255),
        tipoProduto VARCHAR(255),
        valor DECIMAL(10, 2)
    );
    

    Salve este script em um arquivo com um nome seguindo a convenção do Flyway, como V1__Create_produtos_table.sql, dentro do diretório de migração.

  3. Execute as migrações: Depois de garantir que os scripts de migração estão corretos e no lugar certo, reinicie sua aplicação para que o Flyway possa aplicar as migrações.

  4. Verifique a configuração do Flyway: Se o problema persistir, verifique as configurações do Flyway no seu application.properties ou application.yml para garantir que tudo está configurado corretamente.

Após seguir esses passos, sua aplicação deve ser capaz de encontrar a tabela produtos e o erro de transação deve ser resolvido.

Espero que essas informações ajudem a solucionar o problema!

Bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.