[RESOLVIDO] Problema com JPA entityManager

1 resposta
Thomasbrazpinto

Olá, eu tenho um servidor mysql conectado a meu sistema, via JPA 2.0, mas na hora de inserir um cadastro em processos, está dando o seguinte erro:
O erro está apenas nas foreign keys, mas eu não consigo entender, pois já fiz outras foreign keys idênticas e funcionaram, mas essa não

javax.persistence.RollbackException: Exception [EclipseLink-7197] (Eclipse Persistence Services - 2.5.2.v20140319-9ad6abd): org.eclipse.persistence.exceptions.ValidationException
Exception Description: Null or zero primary key encountered in unit of work clone [Entidades.Coloutroindices[ idColoutroindices=0 ]], primary key [0]. Set descriptors IdValidation or the "eclipselink.id-validation" property.
Exception Description: Null or zero primary key encountered in unit of work clone [Entidades.Coloutroindices[ idColoutroindices=0 ]], primary key [0]. Set descriptors IdValidation or the "eclipselink.id-validation" property.
	at org.eclipse.persistence.internal.jpa.transaction.EntityTransactionImpl.commit(EntityTransactionImpl.java:157)
	at DAO.DAOGenerico.inserir(DAOGenerico.java:19)
	at Controla.ControlaProcessos.addPro(ControlaProcessos.java:39)
	at Cadastra.CadastraProcessos$9.actionPerformed(CadastraProcessos.java:782)

Segue o actionlistener que dá o problema:

btAdd.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                try {
                    StringTools stT = new StringTools();
                    SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
                    Processo p = new Processo();
                    for(Reclamado r:lRecl){
                        if(r.getIdReclamado()==cbRecl.getSelectedIndex()){
                            p.setReclamadoIdReclamado(r);
                        }
                    }
                    for(Coloutroindices c:lCol){
                        if(c.getIdColoutroindices()==cbTabela.getSelectedIndex()){
                            p.setColoutroindicesIdColoutroindices(c);
                        }
                    }
                    p.setIdProcesso(cPro.getNextId());
                    p.setNprocesso(tfNumeroProcess.getText());
                    p.setAdmissaoProcesso(sdf.parse(tfDatAdmiss.getText()));
                    p.setAjuizamentoProcesso(sdf.parse(tfDatAjuiz.getText()));
                    p.setCalculoProcesso(sdf.parse(tfDatCalc.getText()));
                    p.setCorrecaoProcesso(String.valueOf(cPro.setCor(rbCorrThis.isSelected(),rbCorrThat.isSelected())));
                    p.setDemissaoProcesso(sdf.parse(tfDatDemiss.getText()));
                    p.setDepvinculadaProcesso(cPro.setDep(chbFgtsDep.isSelected()));
                    p.setFgtsProcesso(tfFgts.getText());
                    p.setInssProcesso(String.valueOf(cPro.setInss(rbInssMes.isSelected(),rbInssTot.isSelected(),rbInssNoCalc.isSelected())));
                    p.setIrrfProcesso(String.valueOf(cPro.setIrrf(rbIrrfMes.isSelected(),rbIrrfTot.isSelected(),rbIrrfIn.isSelected(),rbIrrfNoCalc.isSelected())));
                    p.setJurosProcesso(String.valueOf(cPro.setJuros(rbJurosDia.isSelected(),rbJurosMes.isSelected())));
                    p.setLiberacaoProcesso(sdf.parse(tfDatLib.getText()));
                    p.setNautosProcesso(tfNumeroAuto.getText());
                    p.setParametrosProcesso(String.valueOf(cPro.setParametros(chbParamRef.isSelected(),chbParamCalc.isSelected(),chbParamDsr.isSelected())));
                    p.setPrazoProcesso(sdf.parse(tfDatPraz.getText()));
                    p.setPrescricaoProcesso(sdf.parse(tfDatPresc.getText()));
                    p.setReclamanteProcesso(tfReclamante.getText());
                    p.setStatusProcesso(String.valueOf(cPro.setSta(rbStaAfz.isSelected(),rbStaEm.isSelected(),rbStaConc.isSelected(),rbStaEntr.isSelected())));
                    if(cPro.addPro(p)){
                        JOptionPane.showMessageDialog(null,"Seu Processo foi cadastrado com sucesso!");
                    }
                    else{
                        JOptionPane.showMessageDialog(null,"Não foi possível cadastrar o processo!");
                    }
                } catch (Exception E) {
                    E.printStackTrace();
                    JOptionPane.showMessageDialog(null, "Não foi possível inserir o processo!");
                }
            }
        });

segue o método insert, getRecl e getCol

public Coloutroindices getCol(int id){
        System.out.println(id);
        List<Coloutroindices> lCol=daoCol.listInOrderId();
        Coloutroindices c=new Coloutroindices();
        for(Coloutroindices fg:lCol){
            if(fg.getIdColoutroindices()==id){
                c=fg;
            }
        }
        return c;
    }
    
    public Reclamado getRecl(int id){
        System.out.println(id);
        List<Reclamado> lRecl=daoRec.listInOrderId();
        Reclamado i=new Reclamado();
        for(Reclamado r:lRecl){
            if(r.getIdReclamado()==id){
                i=r;
            }
        }
        return i;
    }
    
    public String setDep(boolean b){
        if(b){
            return "s";
        }
        else{
            return "n";
        }
    }

public boolean addPro(Processo P) {
        try {
            daoProcesso.inserir(P);
            return true;
        } catch (Exception E) {
            E.printStackTrace();
            return false;
        }
    }

considere que as listas estão funcionando bem, pois eu já tentei pegar os itens dela via “sout” e todas funcionou perfeitamente, só a partir do inserir que não ocorre

segue o inserir (OBS: eu sei que não ha nada de errado nessa classe, pois eu utilizo ela como base para conexões com outras tabelas e, ela funciona perfeitamente)

public static EntityManager em = Persistence.createEntityManagerFactory("UP").createEntityManager();
    private Class clazz;

    public DAOGenerico(Class clazz) {
        this.clazz = clazz;
    }

    public void inserir(T e) {
        em.getTransaction().begin();
        em.persist(e);
        em.getTransaction().commit();
    }

    public void atualizar(T e) {
        em.getTransaction().begin();
        em.merge(e);
        em.getTransaction().commit();
    }

    public void remover(T e) {
        em.getTransaction().begin();
        em.remove(e);
        em.getTransaction().commit();
    }

    public T obter(int id) {
        return (T) em.find(clazz, id);
    }

    public List<T> list() {
        return em.createQuery("SELECT e FROM " + clazz.getSimpleName() + " e").getResultList();
    }

1 Resposta

Thomasbrazpinto

Consegui resolver o problema substituindo no banco de dados, as foreign keys da tabela processo (que eram identificadas) eu coloquei como não identificada e substitui as classes no java, além de tirar o cadastro com o índice 0, pois ele também estava travando o sistema, isso resolveu meu problema.

Criado 14 de abril de 2016
Ultima resposta 15 de abr. de 2016
Respostas 1
Participantes 1