@FellipeBotelho escreveu:
Pessoa, estou com um problema que não consigo resolver de forma alguma. É o seguinte: estou criando uma aplicação desktop, usando JAVA + Hibernate + PostgreSQL em que somente a operação de exclusão não está funcionando. Já tentei usar vários tipos de soluções, só que nenhuma resolveu.
HibernateUtil.javapackage util; import org.hibernate.boot.registry.StandardServiceRegistry; import org.hibernate.boot.registry.StandardServiceRegistryBuilder; import org.hibernate.cfg.Configuration; import org.hibernate.SessionFactory; public class HibernateUtil{ private static final SessionFactory sessionFactory = buildSessionFactory(); private static SessionFactory buildSessionFactory(){ try{ Configuration cfg = new Configuration(); cfg.configure("hibernate.cfg.xml"); StandardServiceRegistryBuilder registradorServico = new StandardServiceRegistryBuilder(); registradorServico.applySettings(cfg.getProperties()); StandardServiceRegistry servico = registradorServico.build(); return cfg.buildSessionFactory(servico); }catch(Throwable e){ System.out.println("Criacao inicial do objeto SessionFactory falhou. Erro: " + e); throw new ExceptionInInitializerError(e); } } public static SessionFactory getSessionFactory(){ return sessionFactory; } }
DAOFactory.java
package util; // Importação da classe ProdutoDAOHibernate import produto.ProdutoDAOHibernate; // Importação da classe ProdutoDAO import produto.ProdutoDAO; public class DAOFactory{ /* * Método que cria uma sessão para trabalhar com os produtos * É do tipo ProdutoDAO * Retorna um objeto do tipo ProdutoDAO */ public static ProdutoDAO criarProdutoDAO(){ // Instancia um objeto do tipo ProdutoDAOHibernate ProdutoDAOHibernate produtoDAO = new ProdutoDAOHibernate(); // Seta a sessão produtoDAO.setSession(HibernateUtil.getSessionFactory().getCurrentSession()); // retorna o objeto return produtoDAO; } }
ProdutoDAOHibernate.java
package produto; import java.util.ArrayList; import util.HibernateUtil; import java.util.List; import org.hibernate.Query; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.Transaction; import org.hibernate.criterion.Order; public class ProdutoDAOHibernate implements ProdutoDAO{ private SessionFactory sf; Transaction transaction; Session currentSession; private Session session; /* * */ public ProdutoDAOHibernate(){ this.sf = HibernateUtil.getSessionFactory(); this.currentSession = this.sf.getCurrentSession(); this.transaction = null; } /* * */ public void setSession(Session session){ this.session = session; } /* * */ public void salvarProduto(Produto produto){ try{ transaction = currentSession.beginTransaction(); this.session.save(produto); transaction.commit(); if(currentSession.isOpen()){ currentSession.close(); } }catch(Throwable ex){ try{ if(transaction.isActive()){ transaction.rollback(); } }catch(Throwable t){ t.printStackTrace(); } } } /* * */ @Override public void atualizarProduto(Produto produto){ this.transaction = currentSession.beginTransaction(); this.session.update(produto); this.transaction.commit(); } @Override public void excluirProduto(Integer codigo){ this.transaction = currentSession.beginTransaction(); String hql = "DELETE FROM Produto p WHERE p.codigo_produto = :"+codigo; Query query = this.session.createQuery(hql); query.setInteger("codigo_produto", codigo); query.executeUpdate(); this.transaction.commit(); } /* * */ @Override public Produto carregarProduto(Integer codigo){ return (Produto) this.session.get(Produto.class, codigo); } /* * */ @Override public List<Produto> listarProdutos(){ currentSession.beginTransaction(); List produto = new ArrayList(); produto = this.session.createCriteria(Produto.class).addOrder(Order.asc("codigo_produto")).list(); currentSession.close(); return produto; } }
hibernate.cfg.xml
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <property name="dialect">org.hibernate.dialect.PostgreSQLDialect</property> <property name="connection.driver_class">org.postgresql.Driver</property> <property name="connection.url">jdbc:postgresql://localhost:5432/acougue</property> <property name="connection.username">postgres</property> <property name="connection.password">5557975</property> <property name="current_session_context_class">thread</property> <property name="hibernate.hbm2ddl.auto">none</property> <property name="show_sql">true</property> <mapping class="produto.Produto"/> </session-factory> </hibernate-configuration>
Tem um botão na tela que pega o código e leva para ProdutoRN, de lá é chamada o método excluirProduto de ProdutoDAOHibernate passando como argumento o código.
Quando tento excluir o produto, dá esse erro no console:
Exception in thread "AWT-EventQueue-0" org.hibernate.SessionException: Session is closed! at org.hibernate.internal.AbstractSessionImpl.errorIfClosed(AbstractSessionImpl.java:133) at org.hibernate.internal.SessionImpl.beginTransaction(SessionImpl.java:1469) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.hibernate.context.internal.ThreadLocalSessionContext$TransactionProtectionWrapper.invoke(ThreadLocalSessionContext.java:356) at com.sun.proxy.$Proxy8.beginTransaction(Unknown Source) at produto.ProdutoDAOHibernate.excluirProduto(ProdutoDAOHibernate.java:70) at produto.ProdutoRN.excluirProduto(ProdutoRN.java:43) at visao.TelaProduto.btnExcluirActionPerformed(TelaProduto.java:358) at visao.TelaProduto.access$100(TelaProduto.java:10) at visao.TelaProduto$2.actionPerformed(TelaProduto.java:155) at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022) at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348) at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402) at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259) at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252) at java.awt.Component.processMouseEvent(Component.java:6533) at javax.swing.JComponent.processMouseEvent(JComponent.java:3324) at java.awt.Component.processEvent(Component.java:6298) at java.awt.Container.processEvent(Container.java:2236) at java.awt.Component.dispatchEventImpl(Component.java:4889) at java.awt.Container.dispatchEventImpl(Container.java:2294) at java.awt.Component.dispatchEvent(Component.java:4711) at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4888) at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4525) at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4466) at java.awt.Container.dispatchEventImpl(Container.java:2280) at java.awt.Window.dispatchEventImpl(Window.java:2746) at java.awt.Component.dispatchEvent(Component.java:4711) at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758) at java.awt.EventQueue.access$500(EventQueue.java:97) at java.awt.EventQueue$3.run(EventQueue.java:709) at java.awt.EventQueue$3.run(EventQueue.java:703) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76) at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86) at java.awt.EventQueue$4.run(EventQueue.java:731) at java.awt.EventQueue$4.run(EventQueue.java:729) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76) at java.awt.EventQueue.dispatchEvent(EventQueue.java:728) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93) at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
Alguém sabe como resolver? Att.
Mensagens: 23
Participantes: 3