Problema com JPA

2 respostas
R

Senhores,

Estou com problema na hora de criar um simples acesso ao banco via JPA.
Estou tetando acessar uma tabela simples,

create table cliente (id int primary key, nome varchar(50), cidade varchar(50), sobrenome varchar(50))

Ele apresenta o seguinte erro:

Exception in thread "main" Local Exception Stack: Exception [TOPLINK-30004] (Oracle TopLink Essentials - 2.0 (Build b41-beta2 (03/30/2007))): oracle.toplink.essentials.exceptions.PersistenceUnitLoadingException Exception Description: An exception was thrown while processing persistence.xml from URL: file:/C:/Users/rcoelho/Documents/NetBeansProjects/JPAteste/src/ Internal Exception: (1. Content is not allowed in prolog.) at oracle.toplink.essentials.exceptions.PersistenceUnitLoadingException.exceptionProcessingPersistenceXML(PersistenceUnitLoadingException.java:119) at oracle.toplink.essentials.ejb.cmp3.persistence.PersistenceUnitProcessor.processPersistenceXML(PersistenceUnitProcessor.java:146) at oracle.toplink.essentials.ejb.cmp3.persistence.PersistenceUnitProcessor.processPersistenceArchive(PersistenceUnitProcessor.java:84) at oracle.toplink.essentials.ejb.cmp3.persistence.PersistenceUnitProcessor.getPersistenceUnits(PersistenceUnitProcessor.java:74) at oracle.toplink.essentials.internal.ejb.cmp3.JavaSECMPInitializer.initPersistenceUnits(JavaSECMPInitializer.java:223) at oracle.toplink.essentials.internal.ejb.cmp3.JavaSECMPInitializer.initialize(JavaSECMPInitializer.java:242) at oracle.toplink.essentials.internal.ejb.cmp3.JavaSECMPInitializer.initializeFromMain(JavaSECMPInitializer.java:278) at oracle.toplink.essentials.internal.ejb.cmp3.JavaSECMPInitializer.getJavaSECMPInitializer(JavaSECMPInitializer.java:81) at oracle.toplink.essentials.ejb.cmp3.EntityManagerFactoryProvider.createEntityManagerFactory(EntityManagerFactoryProvider.java:119) at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:83) at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:60) at JPA.DAO.ClienteDAO.(ClienteDAO.java:16) at JPA.TESTE.TesteCliente.main(TesteCliente.java:12) Caused by: (1. Content is not allowed in prolog.) at oracle.toplink.essentials.internal.ejb.cmp3.xml.parser.XMLExceptionHandler.error(XMLExceptionHandler.java:37) at oracle.toplink.essentials.internal.ejb.cmp3.xml.parser.XMLExceptionHandler.fatalError(XMLExceptionHandler.java:43) at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.fatalError(ErrorHandlerWrapper.java:218) at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:386) at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:316) at com.sun.org.apache.xerces.internal.impl.XMLScanner.reportFatalError(XMLScanner.java:1438) at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDispatcher.dispatch(XMLDocumentScannerImpl.java:899) at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:368) at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:834) at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:764) at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:148) at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1242) at oracle.toplink.essentials.ejb.cmp3.persistence.PersistenceUnitProcessor.processPersistenceXML(PersistenceUnitProcessor.java:136) ... 11 more Java Result: 1

Meu codigo eh o seguinte

JPA.BEAN
package JPA.BEAN;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name="cliente")
public class Cliente {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
    private int id;
    private String nome;
    private String cidade;
    private String sobrenome;

    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getNome() {
        return nome;
    }
    public void setNome(String nome) {
        this.nome = nome;
    }
    public String getCidade() {
        return cidade;
    }
    public void setCidade(String cidade) {
        this.cidade = cidade;
    }
    public String getSobrenome() {
        return sobrenome;
    }
    public void setSobrenome(String sobrenome) {
        this.sobrenome = sobrenome;
    }
}
JPA.DAO
package JPA.DAO;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;

import JPA.BEAN.Cliente;

public class ClienteDAO {

    EntityManagerFactory emf;

    private EntityManager getEntityManager(){
        return emf.createEntityManager();
    }
    public ClienteDAO() {
    emf = Persistence.createEntityManagerFactory("sistemas");
    }

    public void salvar(Cliente cliente){
        EntityManager em = getEntityManager();
        try{
            em.getTransaction().begin(); //inicia o processo de transacao
            em.persist(cliente);//permite fazer insercoes e atualizacoes no bd
            em.getTransaction().commit();//realizo as alteracoes no banco
        }catch (Exception e) {
            em.getTransaction().rollback();// se rolar uma excecao cancelo acao
            e.printStackTrace();//mostro o percurso de onde veio as excecoes
        }finally{
            em.close();
        }
    }
    public void excluir(Cliente cliente){
        EntityManager em = getEntityManager();

        try{
            em.getTransaction().begin();
            cliente = em.merge(cliente);
            em.remove(cliente);
            em.getTransaction().commit();
        }catch (Exception e) {
            em.getTransaction().rollback();
        }
    }
    public void atualizar(Cliente cliente){
        EntityManager em = getEntityManager();
        try{
            em.getTransaction().begin();
            em.merge(cliente);
            em.getTransaction().commit();
        }catch (Exception e) {
            em.getTransaction().rollback();
        }}
    }
JPA.TESTE
package JPA.TESTE;

import JPA.BEAN.Cliente;
import JPA.DAO.ClienteDAO;

public class TesteCliente {

    /**
     * @param args
     */
    public static void main(String[] args) {
        ClienteDAO clidao = new ClienteDAO();
        Cliente cliente = new Cliente();
    //  cliente.setCidade("salvador");
        cliente.setNome("recife");
        cliente.setSobrenome("neto");
        //cliente.setId(12);
        clidao.salvar(cliente);
        //clidao.excluir(cliente);
    //cliente.setCidade("Sao Paulo");
        //cliente.setId(15);
        //clidao.atualizar(cliente);
    }
}
PERSISTENCE.XML
<?xml version="1.0" encoding="UTF-8"?>
org.hibernate.ejb.HibernatePersistence
< persistence-unit name="sistemas" transaction-type="RESOURCE_LOCAL">
        <!-- Voce tem que dizer ao persistence.xml onde esta a sua entidade -->
        JPA.BEAN.Cliente
            <!--Configuracoes de dialeto e conexao-->
            < property name="hibernate.dialect" value="org.hibernate.dialect.MySQLInnoDBDialect" />
            < property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver" />
            < property name="hibernate.connection.url" value="jdbc:mysql://localhost/test" />
            < property name="hibernate.connection.username" value="root" />
            < property name="hibernate.connection.password" value="rafa10" />
            <!--Configuracoes de Debug-->
            < property name="hibernate.show_sql" value="true" />
            < property name="hibernate.format_sql" value="true" />
            < property name="use_sql_comments" value="true" />
< /persistence-unit>

PS: Estou usando o NetBeans e as APIs que instalei sao toplink-essentials-agent.jar e toplink-essentials.jar

Poderiam me ajudar ?

2 Respostas

R

Alguem ja teve esse tipo de problema ?
Ou sabe do que se trata ?

Poderiam me dar uma luz ?

C

Rafael,

No seu arquivo persistence.xml está mal-formatado. Experimente utilizar como abaixo.

<?xml version="1.0" encoding="ISO-8859-1" ?>
<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_1_0.xsd"
             version="1.0">
  <persistence-unit name="sistemas" transaction-type="RESOURCE_LOCAL">
    <provider>org.hibernate.ejb.HibernatePersistence</provider>
    <class>JPA.BEAN.Cliente</class>
    <properties>
      <!--Configuracoes de dialeto e conexao-->   
      <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLInnoDBDialect" />   
      <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver" />   
      <property name="hibernate.connection.url" value="jdbc:mysql://localhost/test" />   
      <property name="hibernate.connection.username" value="root" />   
      <property name="hibernate.connection.password" value="rafa10" />   
      <property name="hibernate.cache.provider_class" value="org.hibernate.cache.NoCacheProvider"/>
      <!--Configuracoes de Debug-->   
      <property name="hibernate.show_sql" value="true" />   
      <property name="hibernate.format_sql" value="true" />   
      <property name="use_sql_comments" value="true" /> 
    </properties>
  </persistence-unit>
  
</persistence>

@braços

Criado 16 de abril de 2010
Ultima resposta 19 de abr. de 2010
Respostas 2
Participantes 2