Erro ao alterar registro + JPA/Hibernate

1 resposta
edersongoulart

Bem, meu primeiro projeto utilizando JPA/Hibernate, gerei a classe de entidade e a classe de entidade de dados pelo netbeans tudo altomatico, estou conseguindo inserir e excluir, mas o alterar me lança um erro…

java.lang.NullPointerException
        at erp.data.MarcasProdutoJpaController.edit(MarcasProdutoJpaController.java:95)
        at erp.gui.GUIProdutoMarcaCad.btnSalvarActionPerformed(GUIProdutoMarcaCad.java:133)
        at erp.gui.GUIProdutoMarcaCad.access$000(GUIProdutoMarcaCad.java:24)
        at erp.gui.GUIProdutoMarcaCad$1.actionPerformed(GUIProdutoMarcaCad.java:88)
        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:6267)
        at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
        at java.awt.Component.processEvent(Component.java:6032)
        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:4577)
        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:2478)
        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)

Entidade:

@Entity
@Table(name = "MARCAS_PRODUTO")
@NamedQueries({
@NamedQuery(name = "MarcasProduto.findAll", query = "SELECT m FROM MarcasProduto m"), 
@NamedQuery(name = "MarcasProduto.findByCodMarcaAndNomeMarca", query = "SELECT m FROM MarcasProduto m WHERE m.codmarca = :codmarca AND m.nomemarca = :nomemarca"),
@NamedQuery(name = "MarcasProduto.findByCodmarca", query = "SELECT m FROM MarcasProduto m WHERE m.codmarca = :codmarca"),
@NamedQuery(name = "MarcasProduto.findByNomemarca", query = "SELECT m FROM MarcasProduto m WHERE m.nomemarca = :nomemarca")})
public class MarcasProduto implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @Basic(optional = false)
    @SequenceGenerator(name = "id", initialValue=1, allocationSize = 1)
    @GeneratedValue(strategy=GenerationType.TABLE, generator = "id")
    @Column(name = "CODMARCA")
    private Integer codmarca;
    @Column(name = "NOMEMARCA")
    private String nomemarca;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "marcasProdutoCodmarca", fetch=FetchType.LAZY)
    private List<Produtos> produtosCollection;

    public MarcasProduto() {
    }

    public MarcasProduto(Integer codmarca) {
        this.codmarca = codmarca;
    }

    public Integer getCodmarca() {
        return codmarca;
    }

    public void setCodmarca(Integer codmarca) {
        this.codmarca = codmarca;
    }

    public String getNomemarca() {
        return nomemarca;
    }

    public void setNomemarca(String nomemarca) {
        this.nomemarca = nomemarca;
    }

    public List<Produtos> getProdutosCollection() {
        return produtosCollection;
    }

    public void setProdutosCollection(List<Produtos> produtosCollection) {
        this.produtosCollection = produtosCollection;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (codmarca != null ? codmarca.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 MarcasProduto)) {
            return false;
        }
        MarcasProduto other = (MarcasProduto) object;
        if ((this.codmarca == null && other.codmarca != null) || (this.codmarca != null && !this.codmarca.equals(other.codmarca))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "erp.entity.MarcasProduto[codmarca=" + codmarca + "]";
    }

}

Entidade de dados

public class MarcasProdutoJpaController {

    public MarcasProdutoJpaController() {
        //emf = Persistence.createEntityManagerFactory("ERPPU");
        emf = erp.gui.GUIPrincipal.emf;
    }
    private EntityManagerFactory emf = null;

    public EntityManager getEntityManager() {
        return emf.createEntityManager();
    }

    public void create(MarcasProduto marcasProduto) throws PreexistingEntityException, Exception {
        if (marcasProduto.getProdutosCollection() == null) {
            marcasProduto.setProdutosCollection(new ArrayList<Produtos>());
        }
        EntityManager em = null;
        try {
            em = getEntityManager();
            em.getTransaction().begin();
            List<Produtos> attachedProdutosCollection = new ArrayList<Produtos>();
            for (Produtos produtosCollectionProdutosToAttach : marcasProduto.getProdutosCollection()) {
                produtosCollectionProdutosToAttach = em.getReference(produtosCollectionProdutosToAttach.getClass(), produtosCollectionProdutosToAttach.getCodproduto());
                attachedProdutosCollection.add(produtosCollectionProdutosToAttach);
            }
            marcasProduto.setProdutosCollection(attachedProdutosCollection);
            em.persist(marcasProduto);
            for (Produtos produtosCollectionProdutos : marcasProduto.getProdutosCollection()) {
                MarcasProduto oldMarcasProdutoCodmarcaOfProdutosCollectionProdutos = produtosCollectionProdutos.getMarcasProdutoCodmarca();
                produtosCollectionProdutos.setMarcasProdutoCodmarca(marcasProduto);
                produtosCollectionProdutos = em.merge(produtosCollectionProdutos);
                if (oldMarcasProdutoCodmarcaOfProdutosCollectionProdutos != null) {
                    oldMarcasProdutoCodmarcaOfProdutosCollectionProdutos.getProdutosCollection().remove(produtosCollectionProdutos);
                    oldMarcasProdutoCodmarcaOfProdutosCollectionProdutos = em.merge(oldMarcasProdutoCodmarcaOfProdutosCollectionProdutos);
                }
            }
            em.getTransaction().commit();
        } catch (Exception ex) {
            if (findMarcasProduto(marcasProduto.getCodmarca()) != null) {
                throw new PreexistingEntityException("MarcasProduto " + marcasProduto + " already exists.", ex);
            }
            throw ex;
        } finally {
            if (em != null) {
                em.close();
            }
        }
    }

    public void edit(MarcasProduto marcasProduto) throws IllegalOrphanException, NonexistentEntityException, Exception {
        EntityManager em = null;
        try {
            em = getEntityManager();
            em.getTransaction().begin();
            MarcasProduto persistentMarcasProduto = em.find(MarcasProduto.class, marcasProduto.getCodmarca());
            List<Produtos> produtosCollectionOld = persistentMarcasProduto.getProdutosCollection();
            List<Produtos> produtosCollectionNew = marcasProduto.getProdutosCollection();
            List<String> illegalOrphanMessages = null;
            for (Produtos produtosCollectionOldProdutos : produtosCollectionOld) {
                if (!produtosCollectionNew.contains(produtosCollectionOldProdutos)) {
                    if (illegalOrphanMessages == null) {
                        illegalOrphanMessages = new ArrayList<String>();
                    }
                    illegalOrphanMessages.add("You must retain Produtos " + produtosCollectionOldProdutos + " since its marcasProdutoCodmarca field is not nullable.");
                }
            }
            if (illegalOrphanMessages != null) {
                throw new IllegalOrphanException(illegalOrphanMessages);
            }
            List<Produtos> attachedProdutosCollectionNew = new ArrayList<Produtos>();
            for (Produtos produtosCollectionNewProdutosToAttach : produtosCollectionNew) {
                produtosCollectionNewProdutosToAttach = em.getReference(produtosCollectionNewProdutosToAttach.getClass(), produtosCollectionNewProdutosToAttach.getCodproduto());
                attachedProdutosCollectionNew.add(produtosCollectionNewProdutosToAttach);
            }
            produtosCollectionNew = attachedProdutosCollectionNew;
            marcasProduto.setProdutosCollection(produtosCollectionNew);
            marcasProduto = em.merge(marcasProduto);
            for (Produtos produtosCollectionNewProdutos : produtosCollectionNew) {
                if (!produtosCollectionOld.contains(produtosCollectionNewProdutos)) {
                    MarcasProduto oldMarcasProdutoCodmarcaOfProdutosCollectionNewProdutos = produtosCollectionNewProdutos.getMarcasProdutoCodmarca();
                    produtosCollectionNewProdutos.setMarcasProdutoCodmarca(marcasProduto);
                    produtosCollectionNewProdutos = em.merge(produtosCollectionNewProdutos);
                    if (oldMarcasProdutoCodmarcaOfProdutosCollectionNewProdutos != null && !oldMarcasProdutoCodmarcaOfProdutosCollectionNewProdutos.equals(marcasProduto)) {
                        oldMarcasProdutoCodmarcaOfProdutosCollectionNewProdutos.getProdutosCollection().remove(produtosCollectionNewProdutos);
                        oldMarcasProdutoCodmarcaOfProdutosCollectionNewProdutos = em.merge(oldMarcasProdutoCodmarcaOfProdutosCollectionNewProdutos);
                    }
                }
            }
            em.getTransaction().commit();
        } catch (Exception ex) {
            String msg = ex.getLocalizedMessage();
            if (msg == null || msg.length() == 0) {
                Integer id = marcasProduto.getCodmarca();
                if (findMarcasProduto(id) == null) {
                    throw new NonexistentEntityException("The marcasProduto with id " + id + " no longer exists.");
                }
            }
            throw ex;
        } finally {
            if (em != null) {
                em.close();
            }
        }
    }

    public void destroy(Integer id) throws IllegalOrphanException, NonexistentEntityException {
        EntityManager em = null;
        try {
            em = getEntityManager();
            em.getTransaction().begin();
            MarcasProduto marcasProduto;
            try {
                marcasProduto = em.getReference(MarcasProduto.class, id);
                marcasProduto.getCodmarca();
            } catch (EntityNotFoundException enfe) {
                throw new NonexistentEntityException("The marcasProduto with id " + id + " no longer exists.", enfe);
            }
            List<String> illegalOrphanMessages = null;
            List<Produtos> produtosCollectionOrphanCheck = marcasProduto.getProdutosCollection();
            for (Produtos produtosCollectionOrphanCheckProdutos : produtosCollectionOrphanCheck) {
                if (illegalOrphanMessages == null) {
                    illegalOrphanMessages = new ArrayList<String>();
                }
                illegalOrphanMessages.add("This MarcasProduto (" + marcasProduto + ") cannot be destroyed since the Produtos " + produtosCollectionOrphanCheckProdutos + " in its produtosCollection field has a non-nullable marcasProdutoCodmarca field.");
            }
            if (illegalOrphanMessages != null) {
                throw new IllegalOrphanException(illegalOrphanMessages);
            }
            em.remove(marcasProduto);
            em.getTransaction().commit();
        } finally {
            if (em != null) {
                em.close();
            }
        }
    }

    public List<MarcasProduto> findMarcasProdutoEntities() {
        return findMarcasProdutoEntities(true, -1, -1);
    }

    public List<MarcasProduto> findMarcasProdutoEntities(int maxResults, int firstResult) {
        return findMarcasProdutoEntities(false, maxResults, firstResult);
    }

    private List<MarcasProduto> findMarcasProdutoEntities(boolean all, int maxResults, int firstResult) {
        EntityManager em = getEntityManager();
        try {
            Query q = em.createQuery("select object(o) from MarcasProduto as o");
            if (!all) {
                q.setMaxResults(maxResults);
                q.setFirstResult(firstResult);
            }
            return q.getResultList();
        } finally {
            em.close();
        }
    }

    public MarcasProduto findMarcasProduto(Integer id) {
        EntityManager em = getEntityManager();
        try {
            return em.find(MarcasProduto.class, id);
        } finally {
            em.close();
        }
    }

    public int getMarcasProdutoCount() {
        EntityManager em = getEntityManager();
        try {
            return ((Long) em.createQuery("select count(o) from MarcasProduto as o").getSingleResult()).intValue();
        } finally {
            em.close();
        }
    }

}

Lembrando que as entidades foi gerado pelo netbeans, estou em dúvida se pode ser algo relacionado aos anotations…
Desde já Obrigado.

1 Resposta

edersongoulart

na minha classe de entidade possui uma colecao de produtos, é ai que está cagando eu acho, estou suspeitando que meu anotations esteje errado…

Criado 25 de agosto de 2010
Ultima resposta 25 de ago. de 2010
Respostas 1
Participantes 1