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.