E como você converteu ela?
Segue trecho do meu HibernateUtil
public class HibernateUtil {
private static final SessionFactory sessionFactory = buildSessionFactory();
private static SessionFactory buildSessionFactory() {
try {
// Create the SessionFactory from hibernate.cfg.xml
return new Configuration().configure().buildSessionFactory();
} catch (Throwable ex) {
// Make sure you log the exception, as it might be swallowed
System.err.println("Initial SessionFactory creation failed." + ex);
throw new ExceptionInInitializerError(ex);
}
}
public static SessionFactory getSessionFactory() {
return sessionFactory;
}
}
Na sua classe HibernateUtil não tem nenhum método getSession() de onde você tira ele?
Fala Fellipe, no exemplo passado não há chamada para o método getSession()
Tem razão robinson, vou testar aqui, do seu jeito.
Tentei do seu jeito, não deu certo Robinson. Você deu uma olhada nas minhas classes p ver como estão?
Minha classe HibernateUtil:
public class HibernateUtil {
private static final SessionFactory sessionFactory = setSession();
private static SessionFactory setSession() {
try {
Configuration cfg = new Configuration().configure();
StandardServiceRegistryBuilder builder = new StandardServiceRegistryBuilder()
.applySettings(cfg.getProperties());
return cfg.buildSessionFactory(builder.build());
} catch (Throwable e) {
System.out.println(e.getMessage());
return null;
}
}
public static Session getSession() throws HibernateException {
Session session = sessionFactory.openSession();
session.setCacheMode(CacheMode.IGNORE);
return session;
}
}
Fellipe, o que ocorreu? Seria legal se postasse o log.
O log é esse:
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.flush(SessionImpl.java:1251)
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.flush(Unknown Source)
at produto.ProdutoDAOHibernate.excluirProduto(ProdutoDAOHibernate.java:84)
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)
Agora começa a clarear, quando der posta o seu método: excluirProduto
ai você indica onde é a linha 84.
produto.ProdutoDAOHibernate.excluirProduto(ProdutoDAOHibernate.java:84)
Vou almoçar, voltando tentamos novamente!!
Esse é o método
@Override
public void excluirProduto(Integer codigo){
Transaction t = null;
Session s = HibernateUtil.getSessionFactory().openSession();
try{
t = s.beginTransaction();
s.getTransaction().commit();
}catch(RuntimeException e){
if(t != null){
t.rollback();
}
e.printStackTrace();
}finally{
// linha 84 abaixo
session.flush();
session.close();
}
}
Jovem, muda
de:
session.flush();
session.close();
para:
s.flush(); //nome da nossa variável -> Session s = HibernateUtil.getSessionFactory().openSession();
s.close();
Mudei, agora não aparece mais erro, mas também não faz nada. Verifiquei no banco e não excluiu. O certo seria aparecer no console a query de exclusão, já que ativei o sql_show no hibernate.cfg.xml.
Fellipe, quando puder analisa seu método de exclusão.
*Dica você abre um transação, commita…mas "commita o que?
Fiz uns debugs aqui, a query ta certinha. Só não está executando normal. Então não precisa commitar quando estiver fazendo exclusão? Fiz assim pq meu professor disse que necessitava de commitar.
não é nada disso!!!
no trecho:
try{
t = s.beginTransaction();
/*falta a exclusão -> s.delete(seu objeto aqui);*/
s.getTransaction().commit();
}
*dica: preste atenção nos pequenos detalhes.
Ah sim, foi mal, mas logo depois de mandar pra você eu inseri essa parte:
try{
t = s.beginTransaction();
String hql = "DELETE FROM Produto p WHERE p.codigo_produto = :"+codigo;
Query query;
query = session.createQuery(hql);
query.setInteger("codigo_produto", codigo);
query.executeUpdate();
s.getTransaction().commit();
OBS: Não estou excluindo por objeto e sim pelo código do objeto.
A sintaxe do hql seria essa mesmo ou estou fazendo errado?
OBS: Desculpa os erros, mas comecei a mexer com Hibernate faz uma semana. Ainda tô engatinhando.
Sem problemas, todos aprendemos todos os dias!!!
Ao invés de misturar com HQL eu faria assim:
t = s.beginTransaction()
Produto produto= (Produto ) s.load(Produto.class, new Integer(codigo));
s.delete(produto);
s.getTransaction().commit();
Consegui aqui cara. Obrigado mesmo, me salvou nessa.
Por nada!! Boa sorte nos estudos!!!