JPA + TopLink

6 respostas
xwillianss

Estou tentando persistir meus dados, mas só que gera esse erro:

Exception in thread "main" javax.persistence.PersistenceException: No Persistence provider for EntityManager named HibernateAppPU:  No META-INF/persistence.xml was found in classpath.

        at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:154)
        at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:83)
        at org.willian.lib.teste.<init>(teste.java:13)
        at org.willian.lib.teste.main(teste.java:18)
Java Result: 1

aqui vai meus arquivos usados neste sistema:
persistence.xml

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0" 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_1_0.xsd">
  <persistence-unit name="HibernateAppPU" transaction-type="RESOURCE_LOCAL">
    <provider>oracle.toplink.essentials.PersistenceProvider</provider>
    <class>org.willian.lib.Contato</class>
    <properties>
      <property name="toplink.jdbc.user" value="root"/>
      <property name="toplink.jdbc.password" value=""/>
      <property name="toplink.jdbc.url" value="jdbc:mysql://localhost/test"/>
      <property name="toplink.jdbc.driver" value="com.mysql.jdbc.Driver"/>
      <property name="toplink.ddl-generation" value="create-tables"/>
    </properties>
  </persistence-unit>
</persistence>

Contato.java

package org.willian.lib;

import java.io.Serializable;
import javax.persistence.Entity;
import javax.persistence.Id;

@Entity
public class Contato implements Serializable{

    @Id
    private long id;
    private String nome;
    private String fone;
    private String email;
    private String endereco;

    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 getFone() {
        return fone;
    }

    public void setFone(String fone) {
        this.fone = fone;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getEndereco() {
        return endereco;
    }

    public void setEndereco(String endereco) {
        this.endereco = endereco;
    }
}

teste.java

package org.willian.lib;

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

public class teste {

    private static EntityManagerFactory emf;
    private static EntityManager em;

    public teste() {
        emf = (EntityManagerFactory) Persistence.createEntityManagerFactory("HibernateAppPU");
        em = emf.createEntityManager();
    }

    public static void main(String[] args) {
        teste objteste = new teste();
        Contato objcontato = new Contato();
        objcontato.setNome("Willian");
        objcontato.setFone("([telefone removido]");
        objcontato.setEmail("[email removido]");
        objcontato.setEndereco("R S JOrge, 161 Fátima");
        objteste.persist(objcontato);

    }

    public void persist(Object object) {
        em.getTransaction().begin();
        try {
            em.persist(object);
            em.getTransaction().commit();
        } catch (Exception e) {
            e.printStackTrace();
            em.getTransaction().rollback();
        } finally {
            em.close();
        }
    }
}

e eu não sei mais o que fazer, pois o arquivo persistence.xml esta dentro do diretório META-INF. Alguem pode me ajudar?

6 Respostas

Jair_Rillo_Junior

É uma aplicação WEB? Uma aplicação Stand-Alone? Um módulo EJB? Pois o erro diz que não encontrou o arquivo persistence.xml…

Se for uma aplicação WEB, tenta certeza que o META-INF/persistence.xml está dentro do diretorio WEB-INF/classes/…
Em uma aplicação stand-alone, ele deve estar na raiz, assim como em uma módulo EJB.

xwillianss

Jair Rillo Junior:
É uma aplicação WEB? Uma aplicação Stand-Alone? Um módulo EJB? Pois o erro diz que não encontrou o arquivo persistence.xml…

Se for uma aplicação WEB, tenta certeza que o META-INF/persistence.xml está dentro do diretorio WEB-INF/classes/…
Em uma aplicação stand-alone, ele deve estar na raiz, assim como em uma módulo EJB.

É uma aplicação Desktop…

Jair_Rillo_Junior

Portanto, na raiz do seu projeto, deve ter o META-INF/persistence.xml. Se ele estiver em outro local, realmente o JPA não irá encontrar o arquivo.

Talvez esse link possa te ajudar: http://www.jairrillo.com/blog/2008/09/04/introduction-to-jpa-part-1-getting-started/

xwillianss

Jair Rillo Junior:
Portanto, na raiz do seu projeto, deve ter o META-INF/persistence.xml. Se ele estiver em outro local, realmente o JPA não irá encontrar o arquivo.

Talvez esse link possa te ajudar: http://www.jairrillo.com/blog/2008/09/04/introduction-to-jpa-part-1-getting-started/

mas ele está lá…

Jair_Rillo_Junior

Você está usando Eclipse ou Netbeans?
No eclipse por exemplo, lembre-se de criar esse diretório/arquivo dentro do diretório SRC. Pode ser que o MENTA-INF esteja na raiz do seu projeto no Eclipse/Netbeans, porém não existe na raiz do projeto complicado…

xwillianss

Netbeans… valeu pelas dicas… RESOLVIDO. O problema era meu arquivo de configuração hibernate.cfg.xml que estava mal formatado.

Criado 3 de outubro de 2008
Ultima resposta 3 de out. de 2008
Respostas 6
Participantes 2