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

Uma exceção é lançada falando que não tem nenhum provedor de persistência para EntityManager chamado loja

Estou tentando resolver esse problema já faz um tempão, procurei em outros foruns e nada. Se vocês poderem me ajudar agraceria muito!

Exceção lançada;

INFO: HHH000318: Could not find any META-INF/persistence.xml file in the classpath
Exception in thread "main" javax.persistence.PersistenceException: No Persistence provider for EntityManager named loja
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:61)
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:39)
    at br.com.byteshop.testes.CadastroDeProduto.main(CadastroDeProduto.java:19)

classe Produto;

package br.com.byteshop.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;

    //Getters  e Setters...

}

Classe CadastroDeProduto;

package br.com.byteshop.testes;

import java.math.BigDecimal;

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

import br.com.byteshop.modelo.Produto;

public class CadastroDeProduto {

    public static void main(String[] args) {
        Produto celular = new Produto();
        celular.setNome("Samsung M30");
        celular.setDescricao("Muito bom.");
        celular.setPreco(new BigDecimal("800"));

        EntityManagerFactory factory = Persistence.createEntityManagerFactory("loja");
        EntityManager entityManager = factory.createEntityManager();
        entityManager.persist(celular);
    }

}

Meu 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">
        <provider>org.hibernate.ejb.HibernatePersistence</provider>
        <class>br.com.byteshop.modelo.Produto</class>

        <properties>
            <property name="javax.persistence.jdbc.driver"
                value="com.mysql.jdbc.Driver" />
            <property name="javax.persistence.jdbc.url"
                value="jdbc:mysql://localhost:3306/loja" />
            <property name="javax.persistence.jdbc.user" value="root" />
            <property name="javax.persistence.jdbc.password"
                value="9GOxcnz88I" />

            <property name="hibernate.dialect"
                value="org.hibernate.dialect.MySQLDialect" />
            <property name="hibernate.hbm2ddl.auto" value="update" />
            <property name="hibernate.show_sql" value="true" />
            <property name="hibernate.hbm2ddl.auto" value="create" />
        </properties>

    </persistence-unit>

</persistence>

A estrutura das pastas;

estrutura das pastas

As libs presentes no Maven Dependencies;

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Tabela do banco de dados MySQL (criei a tabela antes de qualquer execução Java):

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Espero ter passado o maximo de informações possiveis.

12 respostas

Oi Fábio,

Parece que a JPA não está encontrando seu arquivo persistence.xml, embora ele esteja criado corretamente na pasta META-INF do projeto.

Talvez no seu projeto o Eclipse não tenha configurado a pasta src/main/resources como sendo uma source folder e por isso o arquivo não é encontrado.

Você pode verificar isso clicando com o botão direito no projeto e indo em: Buid Path -> Configure Build Path... e verificando na aba superior Source.

Olá Rodrigo, tudo bem?

Me desculpe pela demora, não tive tempo ontem. Mas voltando ao assunto, o source folder está configurado corretamente, não sei oque fazer mais, já tentei de tudo.

Print do soucer folder:

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Oi Fábio,

Você tem como disponibilizar seu projeto para avaliarmos o que pode ser o problema?

Uma última verificação: veja no menu superior do Eclipse Project se a opção Build Automatically está marcada.

Bom dia professor.

A opção Build Automatically está marcada sim.

Aqui está o projeto.

Obs: Eu testei com o banco de dados em memória que você utilizou nas aulas e funcionou normalmente.

Oi Fábio,

Eu baixei o seu projeto e aqui funcionou fazendo as seguintes alterações no persistence.xml:

  1. O driver do MySQL tava com a classe antiga
  2. Tava duplicada a propriedade hibernate.hbm2ddl.auto
  3. A propriedade do dialeto do hibernate do MySQL estava incorreta.

Alterando ficou assim:

<?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">
        <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
        <class>br.com.byteshop.modelo.Produto</class>

        <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" />
            <property name="javax.persistence.jdbc.user" value="root" />
            <property name="javax.persistence.jdbc.password" value="9GOxcnz88I" />

            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect" />
            <property name="hibernate.show_sql" value="true" />
            <property name="hibernate.hbm2ddl.auto" value="create" />
        </properties>
    </persistence-unit>
</persistence>

Boa tarde professor.

Eu tentei aqui e também não foi, eu não sei o que está acontecendo para o meu não funcionar. Será que se eu desinstalar completamento o MySQL deve resolver esse problema? Por que eu não sei mais o que pode resolver esse problema.

Pode ser algo com o Eclipse e/ou workspace.

Tenta crair outro workspace e importar o projeto nele para ver se resolve.

Continua dando o mesmo problema, mesmo em outras IDEAS, como a intellij por exemplo.

Ah outra coisa,

posta aqui a exception completa que aparece no console.

Aqui está a exception completa:

out. 28, 2021 5:08:54 PM org.hibernate.jpa.boot.internal.PersistenceXmlParser doResolve
INFO: HHH000318: Could not find any META-INF/persistence.xml file in the classpath
Exception in thread "main" javax.persistence.PersistenceException: No Persistence provider for EntityManager named loja
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:85)
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:54)
    at br.com.byteshop.testes.CadastroDeProduto.main(CadastroDeProduto.java:19)

Pois é Fábio,

Não consegui descobrir o que pode ser o problema aí no seu caso.

Um último chute meu seria que você está utilizando o Java 17, e talvez tenha alguma imcompatibilidade. Eu testei aqui com o Java 11 no meu computador e funcionou certinho.

solução!

Acabei de tentar aqui e realmente não foi, mas tudo bem, vou usar o banco de dados em memoria como você nas aulas.

Muito obrigado, você realmente tentou me ajudar.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software