Erro ao utlizar JPA

2 respostas
D

Olá pessoal, estou fazendo uma aplicação simples utilizando JPA para saber se eu estou sabendo utilizar o mesmo. Mas, está dando erro. Segue abaixo o erro que aparece, as minhas duas classes, e o código sql para criar o BD e a tabela.
Utilizo o PostgreSQL 8.4 como BD, e adicionei a biblioteca do PostgreSQL, os jar…

Erro:

[color=red]

13/04/2010 12:55:03 org.hibernate.cfg.annotations.Version 

INFO: Hibernate Annotations 3.3.1.GA

13/04/2010 12:55:04 org.hibernate.cfg.Environment 

INFO: Hibernate 3.2.5

13/04/2010 12:55:04 org.hibernate.cfg.Environment 

INFO: hibernate.properties not found

13/04/2010 12:55:04 org.hibernate.cfg.Environment buildBytecodeProvider

INFO: Bytecode provider name : cglib

13/04/2010 12:55:04 org.hibernate.cfg.Environment 

INFO: using JDK 1.4 java.sql.Timestamp handling

13/04/2010 12:55:04 org.hibernate.ejb.Version 

INFO: Hibernate EntityManager 3.3.2.GA

Exception in thread AWT-EventQueue-0 javax.persistence.PersistenceException: No Persistence provider for EntityManager named jpa_sysPoliClinic

at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:55)

at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:33)

at model.Paciente.adicionarPaciente(Paciente.java:72)

at viewControl.AdicionarPaciente.btnCadastrarActionPerformed(AdicionarPaciente.java:117)

at viewControl.AdicionarPaciente.access$100(AdicionarPaciente.java:20)

at viewControl.AdicionarPaciente$FormListener.actionPerformed(AdicionarPaciente.java:105)

at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)

at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)

at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)

at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)

at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)

at java.awt.Component.processMouseEvent(Component.java:6263)

at javax.swing.JComponent.processMouseEvent(JComponent.java:3255)

at java.awt.Component.processEvent(Component.java:6028)

at java.awt.Container.processEvent(Container.java:2041)

at java.awt.Component.dispatchEventImpl(Component.java:4630)

at java.awt.Container.dispatchEventImpl(Container.java:2099)

at java.awt.Component.dispatchEvent(Component.java:4460)

at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4574)

at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)

at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)

at java.awt.Container.dispatchEventImpl(Container.java:2085)

at java.awt.Window.dispatchEventImpl(Window.java:2475)

at java.awt.Component.dispatchEvent(Component.java:4460)

at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)

at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)

at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)

at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)

at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)

at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)

at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)

[/color]

Classe: AdicionarPaciente
package viewControl

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/*
 * AdicionarPaciente.java
 *
 * Created on 12/04/2010, 20:38:10
 */

package viewControl;

import model.Paciente;

/**
 *
 * @author Proprietário
 */
public class AdicionarPaciente extends javax.swing.JFrame {
    /** Creates new form AdicionarPaciente */
    public AdicionarPaciente() {
        initComponents();
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">
    private void initComponents() {

        jLabel1 = new javax.swing.JLabel();
        jLabel2 = new javax.swing.JLabel();
        jLabel3 = new javax.swing.JLabel();
        jtfNome = new javax.swing.JTextField();
        jtfTelefone = new javax.swing.JTextField();
        jtfEndereco = new javax.swing.JTextField();
        btnCadastrar = new javax.swing.JButton();

        FormListener formListener = new FormListener();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        jLabel1.setText("Nome:");

        jLabel2.setText("Telefone:");

        jLabel3.setText("Endereço:");

        btnCadastrar.setText("Cadastrar");
        btnCadastrar.addActionListener(formListener);

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(jLabel2)
                            .addComponent(jLabel3)
                            .addComponent(jLabel1))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                            .addComponent(jtfTelefone, javax.swing.GroupLayout.DEFAULT_SIZE, 207, Short.MAX_VALUE)
                            .addComponent(jtfNome)
                            .addComponent(jtfEndereco)))
                    .addComponent(btnCadastrar))
                .addContainerGap(37, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                    .addComponent(jLabel1)
                    .addComponent(jtfNome, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel2)
                    .addComponent(jtfTelefone, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel3)
                    .addComponent(jtfEndereco, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(47, 47, 47)
                .addComponent(btnCadastrar)
                .addContainerGap(74, Short.MAX_VALUE))
        );

        pack();
    }

    // Code for dispatching events from components to event handlers.

    private class FormListener implements java.awt.event.ActionListener {
        FormListener() {}
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            if (evt.getSource() == btnCadastrar) {
                AdicionarPaciente.this.btnCadastrarActionPerformed(evt);
            }
        }
    }// </editor-fold>

    
    
    private void btnCadastrarActionPerformed(java.awt.event.ActionEvent evt) {
        Paciente p = new Paciente();
        p.setNome(jtfNome.getText());
        p.setEndereco(jtfEndereco.getText());
        p.setTelefone(jtfTelefone.getText());
        p.adicionarPaciente(p);
    }

    /**
    * @param args the command line arguments
    */
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new AdicionarPaciente().setVisible(true);
            }
        });
    }

    // Variables declaration - do not modify
    private javax.swing.JButton btnCadastrar;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JTextField jtfEndereco;
    private javax.swing.JTextField jtfNome;
    private javax.swing.JTextField jtfTelefone;
    // End of variables declaration
}

Classe: Paciente
package model

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package model;

import java.io.Serializable;
import javax.persistence.Entity;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Persistence;

/**
 *
 * @author Proprietário
 */
@Entity
public class Paciente implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;
    private String nome;
    private String telefone;
    private String endereco;

    


    public Long getId() {
        return id;
    }

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

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (id != null ? id.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Paciente)) {
            return false;
        }
        Paciente other = (Paciente) object;
        if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
            return false;
        }
        return true;
    }

    public void adicionarPaciente(Paciente p){
      
       /* System.out.println(p.getNome());
        System.out.println(p.getTelefone());
        System.out.println(p.getEndereco());
       */
        nome = p.getNome();
        endereco = p.getEndereco();
        telefone = p.getTelefone();

        EntityManagerFactory fabricaDAO = Persistence.createEntityManagerFactory("jpa_sysPoliClinic");
        EntityManager dao = fabricaDAO.createEntityManager();
        dao.getTransaction().begin();
        dao.persist(p);
        dao.getTransaction().commit();



    }

    @Override
    public String toString() {
        return "model.Paciente[id=" + id + "]";
    }

    /**
     * @return the nome
     */
    public String getNome() {
        return nome;
    }

    /**
     * @param nome the nome to set
     */
    public void setNome(String nome) {
        this.nome = nome;
    }

    /**
     * @return the telefone
     */
    public String getTelefone() {
        return telefone;
    }

    /**
     * @param telefone the telefone to set
     */
    public void setTelefone(String telefone) {
        this.telefone = telefone;
    }

    /**
     * @return the endereco
     */
    public String getEndereco() {
        return endereco;
    }

    /**
     * @param endereco the endereco to set
     */
    public void setEndereco(String endereco) {
        this.endereco = endereco;
    }

}

BD e tabela Paciente

-- Database: "jpa_sysPoliClinic"

-- DROP DATABASE "jpa_sysPoliClinic";

CREATE DATABASE "jpa_sysPoliClinic"
  WITH OWNER = postgres
       ENCODING = 'UTF8'
       LC_COLLATE = 'Portuguese, Brazil'
       LC_CTYPE = 'Portuguese, Brazil'
       CONNECTION LIMIT = -1;

-- Table: "Paciente"

-- DROP TABLE "Paciente";

CREATE TABLE "Paciente"
(
  codigo serial NOT NULL,
  nome text,
  telefone text,
  endereco text,
  CONSTRAINT cod_paciente PRIMARY KEY (codigo)
)
WITH (
  OIDS=FALSE
);
ALTER TABLE "Paciente" OWNER TO postgres;

[color=red]Pessoal, por favor, me ajudem…!!
Agradeço desde já,
Dina[/color]

2 Respostas

B

Oi dina,

Seu erro provavelmente está aqui:

No Persistence provider for EntityManager named jpa_sysPoliClinic

Tem como você postar seu persistence.xml ? Você está utilizando o Hibernate como provedor de persistência ou algum outro implementador?

Abraços…

D

Brenoooo…
Deu certo!!
Aiii obrigadão…!!

Eu estou usando o Hibernate. E quando vc falou onde está provavelmente o erro que seria no nome e citou o persistence.xml, fui dar uma olhada e vi que realmente o nome que estava no .xml não batia como o que estava no meu código.

O correto é jpa_sysPoliClinicPU, corrigi o erro e deu certo!!!
:slight_smile: MUITO OBRIGADA!!!

Criado 13 de abril de 2010
Ultima resposta 13 de abr. de 2010
Respostas 2
Participantes 2