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

java.lang.ExceptionInInitializerError

package br.com.caelum.financas.teste;

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

import br.com.caelum.financas.modelo.Conta;
import br.com.caelum.financas.util.JPAUtil;

public class TesteConta {

    public static void main(String[] args) {

        Conta conta = new Conta();
        conta.setTitular("Henrique");
        conta.setAgencia("123");
        conta.setBanco("Caixa");
        conta.setNumero("456");

        // Criando o Objeto de gerenciamento, a classe Persistence representa o arquivo xml, passando o nome da persistencia é criado o Gerenciador
        // EntityManagerFactory emf = Persistence.createEntityManagerFactory("financas");
        // Necessario para usar a JPA, Objeto de gerenciamento das entidades do BD
        EntityManager em = new JPAUtil().getEntityManager();

        // Inicia a transação com o BD 
        em.getTransaction().begin();
        // Persiste o usuário conta no BD
        em.persist(conta);
        // Encerra a transação
        em.getTransaction().commit();

        em.close();
    }
}

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" java.lang.ExceptionInInitializerError at br.com.caelum.financas.teste.TesteConta.main(TesteConta.java:23) Caused by: javax.persistence.PersistenceException: No Persistence provider for EntityManager named financas at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:85) at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:54) at br.com.caelum.financas.util.JPAUtil.(JPAUtil.java:9) ... 1 more

Acima segue erro no console quando executo a classe TesteConta, alguma dica do que eu posso fazer para resolver isso ?

7 respostas

Boa noite, verifique em seu arquivo de persistencia se o name do persistence-unit esta realmente como "financas".

<persistence xmlns="http://java.sun.com/xml/ns/persistence"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
        http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
    version="2.0">

    <!-- unidade de persistencia com o nome financas -->
    <persistence-unit name="financas">

        <!-- Implementação do JPA, no nosso caso Hibernate -->
        <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>

        <!-- Aqui são listadas todas as entidades -->
        <class>br.com.caelum.financas.modelo.Conta</class>

        <properties>    
            <!-- Propriedades JDBC -->
            <property name="javax.persistence.jdbc.driver" 
                value="com.mysql.jdbc.Driver" />

            <property name="javax.persistence.jdbc.url" 
                value="jdbc:mysql://localhost/financas" />

            <property name="javax.persistence.jdbc.user" value="root" />
            <property name="javax.persistence.jdbc.password" value="" />

            <!-- Configurações específicas do Hibernate -->
            <property name="hibernate.dialect" 
                value="org.hibernate.dialect.MySQL5InnoDBDialect" />

            <property name="hibernate.hbm2ddl.auto" value="update" />
            <property name="hibernate.show_sql" value="true" />
            <property name="hibernate.format_sql" value="true" />
        </properties>
    </persistence-unit>
</persistence>

Olá, obrigado pela resposta, mas sim o nome está como financas.

Bom dia, poderia mandar a classe JPAUtil?

Aproveita e da uma olhada se seu arquivo persistence se encontra no diretorio src/META-INF/persistence.xml

package br.com.caelum.financas.util;

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

public class JPAUtil {

    private static EntityManagerFactory emf = Persistence.createEntityManagerFactory("financas");

    public EntityManager getEntityManager() {
        return emf.createEntityManager();
   }
}

Bom dia, segue classe JPAUtil; e o persistence.xml está dentro do META-INF, só não se encontra dentro de /src, a pasta META-INF fica na raiz do projeto.

solução!

Coloca ela dentro da /src/META-INF/standalone.xml. Esse é o caminho padrão de inicialização do arquivo de persistencia. Perceba que no primeiro log informado ele tenta acessar o mesmo e não consegue:

Could not find any META-INF/persistence.xml file in the classpath

Ou seja ele tenta acessar o classpath e encontrar a pasta META-INF e por sequencia o persistence.xml.

Tente fazendo essa alteração: /usr/META-INF/persistence.xml. Acredito que seja esse o problema ;)

Cara consegui resolver, tive que rodar depois um comando no sql sobre TimeZone, mais a sua dica ajudou pra caramba, vlw.