Problemas com Hibernate(Excluir Registro do Banco de Dados)

Boa noite pessoal,
Estou desenvolvendo uma aplicação web e estou tendo dificuldades para excluir um registro do banco de dados.
Tenho um link [excluir] na minha tela de pesquisa que joga pra uma tela de confirmação de exclusão, porém o registro não está sendo deletado.

Pesquisar.hxm:

<h:commandLink value="Excluir" action="#{apartamentoController.r()}"> <f:setPropertyActionListener target="#{apartamentoController.apartamento.idapartamento}" value="#{apartamento.idapartamento}" /> </h:commandLink>

ConfirmarExclusao.xhtml:

ApartamentoController.java:

[code]
public String r(){
ApartamentoDao dao = new ApartamentoDaoImp();
apartamento = dao.getApartamento(this.apartamento.getIdapartamento());
return “confirmaExclusao”;
}

public String excluirApartamento() {
ApartamentoDao dao = new ApartamentoDaoImp();
dao.remove(apartamento);
listarApartamentos();
return pesquisarApartamento();
}[/code]

A implementação do meu dao ta mais ou menos assim, ApartamentoDaoImp.java:

[code]

private Session session;
private Transaction t;

@Override
public Apartamento getApartamento(int id) {
try{
session = HibernateUtil.getSessionFactory().openSession();
return (Apartamento) session.load(Apartamento.class, id);
}catch(Exception e){
return null;
}
}

@Override
public void remove(Apartamento apartamento) {
try {
session = HibernateUtil.getSessionFactory().openSession();
t = session.beginTransaction();
session.delete(apartamento);
t.commit();
} catch (Exception e) {
}
finally{
session.close();
}
}[/code]

Alguém sabe onde eu estou errando? obrigado :slight_smile:

[quote=eduardos]Boa noite pessoal,
Estou desenvolvendo uma aplicação web e estou tendo dificuldades para excluir um registro do banco de dados.
Tenho um link [excluir] na minha tela de pesquisa que joga pra uma tela de confirmação de exclusão, porém o registro não está sendo deletado.

Pesquisar.hxm:

<h:commandLink value="Excluir" action="#{apartamentoController.r()}"> <f:setPropertyActionListener target="#{apartamentoController.apartamento.idapartamento}" value="#{apartamento.idapartamento}" /> </h:commandLink>

ConfirmarExclusao.xhtml:

ApartamentoController.java:

[code]
public String r(){
ApartamentoDao dao = new ApartamentoDaoImp();
apartamento = dao.getApartamento(this.apartamento.getIdapartamento());
return “confirmaExclusao”;
}

public String excluirApartamento() {
ApartamentoDao dao = new ApartamentoDaoImp();
dao.remove(apartamento);
listarApartamentos();
return pesquisarApartamento();
}[/code]

A implementação do meu dao ta mais ou menos assim, ApartamentoDaoImp.java:

[code]

private Session session;
private Transaction t;

@Override
public Apartamento getApartamento(int id) {
try{
session = HibernateUtil.getSessionFactory().openSession();
return (Apartamento) session.load(Apartamento.class, id);
}catch(Exception e){
return null;
}
}

@Override
public void remove(Apartamento apartamento) {
try {
session = HibernateUtil.getSessionFactory().openSession();
t = session.beginTransaction();
session.delete(apartamento);
t.commit();
} catch (Exception e) {
}
finally{
session.close();
}
}[/code]

Alguém sabe onde eu estou errando? obrigado :)[/quote]

O metodo public String excluirApartamento() tem obrigatoriamente que começar por “get”. Ou seja, seu metodo excluir deve ser assim:

public String getExcluirApartamento() {
        ApartamentoDao dao = new ApartamentoDaoImp();
        dao.remove(apartamento);
        listarApartamentos();
        return pesquisarApartamento();
    }

Sds,

Maurício.

[quote=maurijava]O metodo public String excluirApartamento() tem obrigatoriamente que começar por “get”. Ou seja, seu metodo excluir deve ser assim:

public String getExcluirApartamento() {
        ApartamentoDao dao = new ApartamentoDaoImp();
        dao.remove(apartamento);
        listarApartamentos();
        return pesquisarApartamento();
    }

Sds,

Maurício.[/quote]

Maurício desse jeito que você falou, ele não reconhece o meu método, não chega nem a entrar nele.

[quote=eduardos][quote=maurijava]O metodo public String excluirApartamento() tem obrigatoriamente que começar por “get”. Ou seja, seu metodo excluir deve ser assim:

public String getExcluirApartamento() {
        ApartamentoDao dao = new ApartamentoDaoImp();
        dao.remove(apartamento);
        listarApartamentos();
        return pesquisarApartamento();
    }

Sds,

Maurício.[/quote]

Maurício desse jeito que você falou, ele não reconhece o meu método, não chega nem a entrar nele.[/quote]

Perdão!

  tira os parenteses lá na chamada do <p:comandButton>... ou seja:
<p:commandButton value="Excluir" action="#{apartamentoController.excluirApartamento}" /> 

outra coisa, como é que você está passando o argumento para o metodo excluir? tá pegado pela seção? O seu Manage Bean está com qual escopo? não vi como você está passando o parametro apartamento para o metodo Excluir…

Sds,

Maurício.

eu tinha tirado, mas ele nem reconheceu :confused:

Estranho! É JSF 2.0 que você está usando? Outra dica é fazer teste unitário nos metodos antes de partir para implemantar as views…

sim 2.0, ele passa por todos os metodos do jeito que tava, mas não exclui.
quando eu levanto meu tomcat, no log ele ta aparecendo isso:
Mai 02, 2013 12:00:27 AM org.apache.catalina.core.StandardWrapperValve invoke

SEVERE: Servlet.service() for servlet [Faces Servlet] in context with path [/SGH] threw exception [could not initialize proxy - no Session] with root cause
org.hibernate.LazyInitializationException: could not initialize proxy - no Session
at org.hibernate.proxy.AbstractLazyInitializer.initialize(AbstractLazyInitializer.java:57)
at org.hibernate.proxy.AbstractLazyInitializer.getImplementation(AbstractLazyInitializer.java:111)
at org.hibernate.proxy.pojo.cglib.CGLIBLazyInitializer.invoke(CGLIBLazyInitializer.java:150)
at br.com.sgh.model.Apartamento$$EnhancerByCGLIB$$e74c8d05.getNumero()
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at javax.el.BeanELResolver.getValue(BeanELResolver.java:87)
at com.sun.faces.el.DemuxCompositeELResolver._getValue(DemuxCompositeELResolver.java:176)
at com.sun.faces.el.DemuxCompositeELResolver.getValue(DemuxCompositeELResolver.java:203)
at org.apache.el.parser.AstValue.getValue(AstValue.java:169)
at org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:189)
at com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:109)
at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:194)
at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:182)
at javax.faces.component.UIOutput.getValue(UIOutput.java:169)
at com.sun.faces.renderkit.html_basic.HtmlBasicInputRenderer.getValue(HtmlBasicInputRenderer.java:205)
at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.getCurrentValue(HtmlBasicRenderer.java:355)
at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.encodeEnd(HtmlBasicRenderer.java:164)
at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:875)
at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.encodeRecursive(HtmlBasicRenderer.java:312)
at com.sun.faces.renderkit.html_basic.GridRenderer.renderRow(GridRenderer.java:185)
at com.sun.faces.renderkit.html_basic.GridRenderer.encodeChildren(GridRenderer.java:129)
at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:845)
at org.primefaces.renderkit.CoreRenderer.renderChild(CoreRenderer.java:59)
at org.primefaces.renderkit.CoreRenderer.renderChildren(CoreRenderer.java:47)
at org.primefaces.component.panel.PanelRenderer.encodeContent(PanelRenderer.java:202)
at org.primefaces.component.panel.PanelRenderer.encodeMarkup(PanelRenderer.java:119)
at org.primefaces.component.panel.PanelRenderer.encodeEnd(PanelRenderer.java:56)
at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:875)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1763)
at javax.faces.render.Renderer.encodeChildren(Renderer.java:168)
at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:845)
at org.primefaces.renderkit.CoreRenderer.renderChild(CoreRenderer.java:59)
at org.primefaces.renderkit.CoreRenderer.renderChildren(CoreRenderer.java:47)
at org.primefaces.component.layout.LayoutUnitRenderer.encodeEnd(LayoutUnitRenderer.java:51)
at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:875)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1763)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1759)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1759)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1759)
at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:401)
at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:131)
at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:121)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:410)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:225)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:999)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:565)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:309)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:722)

sabe o que é? não tenho idéia do que possa ser isso :confused:

[quote=eduardos]sim 2.0, ele passa por todos os metodos do jeito que tava, mas não exclui.
quando eu levanto meu tomcat, no log ele ta aparecendo isso:
Mai 02, 2013 12:00:27 AM org.apache.catalina.core.StandardWrapperValve invoke

SEVERE: Servlet.service() for servlet [Faces Servlet] in context with path [/SGH] threw exception [could not initialize proxy - no Session] with root cause
org.hibernate.LazyInitializationException: could not initialize proxy - no Session

sabe o que é? não tenho idéia do que possa ser isso :/[/quote]

Acho, não tenho certeza, que o proxi da sua máquina esta sendo bloqueado pelo Firewall ou coisa do tipo.

Quanto ao problema de não excluir. Veja questão do escopo do Bean, se vc tiver trabalhando por anotação, então o seu Bean tem que ter o@ManagedBean e @SessionScoped, pois como você troca de página para confirmar a exclusão o seu escopo deve ser de seção. Pode ser isso.

Posta o Bean completo…

Sds,

Maurício

sim estou usando anotações:

[code]package br.com.sgh.controller;

import br.com.sgh.dao.ApartamentoDao;
import br.com.sgh.dao.ApartamentoDaoImp;
import br.com.sgh.model.Apartamento;
import br.com.sgh.utils.HibernateUtil;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import org.hibernate.Query;
import org.hibernate.Session;

@ManagedBean
@SessionScoped
public class ApartamentoController implements Serializable{

private Apartamento apartamento;
private List<Apartamento> listaApartamento = new ArrayList<Apartamento>();

public ApartamentoController(){
    apartamento = new Apartamento();
}

public String listarApartamentos() {
    apartamento = new Apartamento();
    this.listaApartamento = new ApartamentoDaoImp().list();
    return "/apartamento/pesquisar.xhtml";
}

public String prepararNovoApartamento() {
    apartamento = new Apartamento();
    apartamento.setStatusApartanto(false);
    return "cadastrar";
}

public String prepararAlterarApartamento() {
     ApartamentoDao dao = new ApartamentoDaoImp();
    apartamento = dao.getApartamento(this.apartamento.getIdapartamento());
    return "alterar";
}

public String excluirApartamento() {
    ApartamentoDao dao = new ApartamentoDaoImp();
    dao.remove(apartamento);
    listarApartamentos();
    return pesquisarApartamento();
}

public String salvarApartamento() {
    ApartamentoDao dao = new ApartamentoDaoImp();
    dao.save(apartamento); 
    limparObjetoApartamento();
    return pesquisarApartamento();
}

private void limparObjetoApartamento(){
    apartamento = new Apartamento();
}

public String alterarApartamento() {
    ApartamentoDao dao = new ApartamentoDaoImp();
    dao.update(apartamento);
    limparObjetoApartamento();
    return pesquisarApartamento();
}

public String r(){
    ApartamentoDao dao = new ApartamentoDaoImp();
    apartamento = dao.getApartamento(this.apartamento.getIdapartamento());
    return "confirmaExclusao";
}

public String pesquisarApartamento() {
    Session session = HibernateUtil.getSessionFactory().openSession();
    StringBuffer sql = new StringBuffer();
    sql.append("FROM Apartamento apartamento ");
    if (apartamento.getNumero() != null && !apartamento.getNumero().equals("")) {
        sql.append("WHERE apartamento.numero=:numero");

    }
    Query q = session.createQuery(sql.toString());
    if (apartamento.getNumero() != null && !apartamento.getNumero().equals("")) {
        q.setParameter("numero", apartamento.getNumero());
    }
    listaApartamento = q.list();
    return "pesquisar";
}

public String voltar(){
    limparObjetoApartamento();
    return "pesquisar";
}

public Apartamento getApartamento() {
    return apartamento;
}

public void setApartamento(Apartamento apartamento) {
    this.apartamento = apartamento;
}

public List<Apartamento> getListaApartamento() {
    return listaApartamento;
}

public void setListaApartamento(List<Apartamento> listaApartamento) {
    this.listaApartamento = listaApartamento;
}

}[/code]