Hibernate não persiste objeto!

3 respostas
R

Tenho esse código que quando chega no em.persiste§ da uma exeção muito loca.

*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package as.com.sisclinica.util;

import as.com.sisclinica.model.Convenios;
import as.com.sisclinica.model.DadosCadastrais;
import as.com.sisclinica.model.Endereco;
import as.com.sisclinica.model.Pacientes;
import as.com.sisclinica.model.Pronomes;
import com.sun.org.apache.bcel.internal.generic.IFEQ;
import java.sql.Statement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Properties;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.swing.JOptionPane;

/**
 *
 * @author usuario
 */
public class GeraBanco {

    /**
     * @param args the command line arguments
     */
    private String url = "jdbc:odbc:clinica";
    private String driver = "sun.jdbc.odbc.JdbcOdbcDriver";
    private String user = "clinica";
    private String pwd = "105031";//Senha do Banco de dados
    private static Connection con = null;

    public static void main(String[] args) {
        Properties cfg = new Properties();
        //cfg.setProperty("hibernate.hbm2ddl.auto", "create");
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("SisClinicaPU", cfg);
        //EntityManagerFactory emf = Persistence.createEntityManagerFactory("MyJpaExamplesPU",cfg);
        EntityManager em = emf.createEntityManager();

        try {

            GeraBanco gb = new GeraBanco();
            gb.conecta();
            // Após estabelecermos a conexão com o banco de dados
            // Utilizamos o método createStatement de con para criar o Statement
            Statement stm = con.createStatement();
            Statement stm2 = con.createStatement();

            // Vamos executar o seguinte comando SQL :
            String SQL = "Select * from DCLIN004 where PAC_CODI = 1";
            String SQL2 = "Select * from DCLIN002";

            // Definido o Statement, executamos a query no banco de dados
            ResultSet rs = stm.executeQuery(SQL);
            ResultSet rs2 = stm2.executeQuery(SQL2);

            // O método next() informa se houve resultados e posiciona o cursor do banco
            // na próxima linha disponível para recuperação
            // Como esperamos várias linhas utilizamos um laço para recuperar os dados

            rs.next();
            rs2.next();
                // Os métodos getXXX recuperam os dados de acordo com o tipo SQL do dado:

                Endereco e = new Endereco();
                e.setCep(rs.getString("PAC_CEPE"));//ok
                e.setCidade(rs.getString("PAC_CIDA"));//ok
                e.setLogradouro(rs.getString("PAC_ENDE"));//ok
                e.setUf(rs.getString("PAC_ESTA"));//ok
                em.merge(e);

                DadosCadastrais dc = new DadosCadastrais();                
                dc.setDatanascimento(rs.getDate("PAC_NASC"));//ok
                dc.setEstadocivil(rs.getString("PAC_CIVI"));//ok
                dc.setSexo(rs.getString("PAC_SEXO"));//ok
                dc.setTelefoneresidencial(rs.getString("PAC_FONE"));//ok
                dc.setEndereco(e);
                em.merge(dc);

                Pacientes p = new Pacientes();
                //p.setIdPaciente(rs.getInt("PAC_CODI"));//ok
                p.setAltura(rs.getFloat("PAC_ALTU"));//ok
                p.setAnamnese(rs.getString("PAC_ANAM"));//ok
                p.setNome(rs.getString("PAC_NOME"));//ok
                p.setPeso(rs.getFloat("PAC_PESO"));//ok
                p.setProfissao(rs.getString("PAC_PROF"));//ok                
                Convenios c = new Convenios(rs2.getInt("CON_CODI"));
                //String s = c.getNome();
                p.setConvenio(c);//ok
                p.setDadosCadastrais(dc);
                Pronomes pronome = null;
                String pro = rs.getString("PAC_SR");
                if (pro.equals("")) {
                    pronome = new Pronomes(1);
                } else if (pro.contentEquals("Sr")) {
                    pronome = new Pronomes(2);
                } else if (pro.contentEquals("Sra")) {
                    pronome = new Pronomes(3);
                } else if (pro.contentEquals("Stra")) {
                    pronome = new Pronomes(4);
                } else if (pro.contentEquals("Dr.")) {
                    pronome = new Pronomes(5);
                } else if (pro.contentEquals("Dra.")) {
                    pronome = new Pronomes(6);
                } else if (pro.contentEquals("Prof")) {
                    pronome = new Pronomes(7);
                }
                p.setPronome(pronome);//ok

                em.getTransaction().begin();
                //em.merge(dc);
                //em.merge(e);                
                em.persist(p);
                em.getTransaction().commit();
                System.out.println("Será q vai dar pau!!!");

            // As variáveis tit, aut e totalFaixas contém os valores retornados
            // pela query. Vamos imprimí-los
            //System.out.println("O código do paciente é: "+ cod +" e o nome dele é " + nome);
            


        } catch (SQLException e) {
            // se houve algum erro, uma exceção é gerada para informar o erro
            e.printStackTrace(); //vejamos que erro foi gerado e quem o gerou
        } finally {
            try {
                con.close();
            } catch (SQLException onConClose) {
                System.out.println("Houve erro no fechamento da conexão");
                onConClose.printStackTrace();
            }
        }


        em.close();
        emf.close();
    }

    public void conecta() {
        try {
            Class.forName(driver);
            con = DriverManager.getConnection(url, user, pwd);
        } catch (ClassNotFoundException e) {
            JOptionPane.showMessageDialog(null, "Ocorreu um erro no sistema, se o problema persistir contate o administrador:\n Driver não encontrado!\n" + e, "ATENÇÃO", JOptionPane.WARNING_MESSAGE);
        } catch (SQLException e) {
            JOptionPane.showMessageDialog(null, "Ocorreu um erro no sistema, se o problema persistir contate o administrador:\n Erro na Conexão com Banco\n" + e, "ATENÇÃO", JOptionPane.WARNING_MESSAGE);
        }
    }
}

e tenho o erro:

Será que alguém poderia me dar uma luz?

Obrigado desde de já!!!

3 Respostas

C

Bom dia,

Vc conseguil resolver o problema?

Cola pra eu seu Bean para eu ver se foi o mesmo problema que tive ontem…

Valeu

R

Como está o mapeamento da classe Convenios? Talvez o link abaixo ajude:

http://joshuajava.wordpress.com/2007/05/07/detached-entity-passed-to-persist/

C

Ontem o caso que eu tive foi por essa linha…
Desta forma o hibernate nao permitiu que eu persistisse o objeto…

@GeneratedValue(strategy=GenerationType.IDENTITY)

Essa linha estava no meu Bean que eu estava tentando persistir.

Qualquer coisa avisa…

Abraços

Criado 3 de abril de 2009
Ultima resposta 22 de set. de 2009
Respostas 3
Participantes 3