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

Could not obtain connection to query metadata: java.lang.IllegalStateException

Bom dia, peço ajuda pra resolver essa exception:

CadastroDeProdutos:

package br.com.alura.loja.testes;

import java.math.BigDecimal;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;

import br.com.alura.loja.modelo.Produto;

public class CadastroDeProdutos {

    public static void main(String[] args) {

        Produto celular = new Produto();
        celular.setNome("Xiomi Redmi");
        celular.setDescricao("Muito legal");
        celular.setPreco(new BigDecimal("800"));

        EntityManagerFactory factory = Persistence
                .createEntityManagerFactory("loja");//cria factory

        EntityManager em = factory.createEntityManager(); 

        em.getTransaction().begin(); 
        em.persist(celular); 
        em.getTransaction().commit(); 
        em.close();                
    }

persistence.xml:

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.2"
    xmlns="http://xmlns.jcp.org/xml/ns/persistence"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_2.xsd">

    <persistence-unit name="loja" transaction-type="RESOURCE_LOCAL" >

        <properties>
            <property name="javax.persistence.jdbc.driver" value="com.mysql.cj.jdbc.Driver" />
            <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/loja?useTimezone=true&amp;serverTimezone=UTC" />
            <property name="javax.persistence.jdbc.user" value="root" /> 
            <property name="javax.persistence.jdbc.password" value="@Leao_1757" />

            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL8Dialect" />
            <property name="hibernate.show_sql" value="true" />
            <property name="hibernate.hbm2ddl.auto" value="update" />
            <property name="hibernate.connection.autocommit" value="true"/>


        </properties>
    </persistence-unit>
</persistence>

pom.xml:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>br.com.alura</groupId>
  <artifactId>loja</artifactId>
  <version>0.0.1-SNAPSHOT</version>

  <build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.8.0</version>
            <configuration>
                <release>11</release>
            </configuration>
        </plugin>
    </plugins>
    </build>

    <dependencies>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-entitymanager</artifactId>
            <version>5.4.27.Final</version>
        </dependency>

    <dependency>
        <groupId>mysql</groupId>
           <artifactId>mysql-connector-java</artifactId>
        <version>8.0.29</version>
    </dependency>
    </dependencies>

</project>

classe Produto:

package br.com.alura.loja.modelo;

import java.math.BigDecimal;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name = "produtos")
public class Produto { 

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private Long id;
    private String nome;
    private String descricao;
    private BigDecimal preco;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public String getDescricao() {
        return descricao;
    }

    public void setDescricao(String descricao) {
        this.descricao = descricao;
    }

    public BigDecimal getPreco() {
        return preco;
    }

    public void setPreco(BigDecimal preco) {
        this.preco = preco;
    }
}

Msg de erro:

WARN: HHH000342: Could not obtain connection to query metadata
java.lang.IllegalStateException: Cannot get a connection as the driver manager is not properly initialized
...

ERROR: Unknown database 'loja'
Exception in thread "main" org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]
(...)
Caused by: org.hibernate.exception.SQLGrammarException: Error calling Driver#connect
...
Caused by:  java.sql.SQLSyntaxErrorException: Unknown database 'loja'

Desde já muito obrigada.

4 respostas

Oi Vanessa,

O erro está no final da stack trace: Caused by: java.sql.SQLSyntaxErrorException: Unknown database 'loja'

No seu MySQL não tem criado o banco de dados loja. A propriedade hibernate.hbm2ddl.auto cria apenas as tabelas, considerando que o banco de dados esteja previamente criado.

Olá, boa tarde.

Abri o terminal e criei o banco de dados e agora o código rodou... Você não precisou fazer isso durante as aulas, pq eu tive que fazer por aqui? Obrigada (:

solução!

Que bom que deu certo :)

Quando gravei a aula já tinha o banco criado e o problema não ocorreu. Podia ter não criado antes para mostrar esse problema =/

Bons estudos!

Ah, sim :)

Professor, muito obrigada! Suas aulas são as melhores!

\o/