Fórum Agora o problema é para deletar =\ #390037

05/11/2010

0

Opa.. escrivi um post pouco tempo atraz
https://www.devmedia.com.br/forum/java/390012--javax-el-PropertyNotFoundException--Target-Unreachable-returned-null.html

e a forma como davi me instruiu a fazer funcionou perfeitamente

mais quando tento deletar me aparece uma mensagem
exception
javax.servlet.ServletException: #{veiculos.delete}: org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: br.com.fotosensores.modelo.Statusroot cause
javax.faces.FacesException: #{veiculos.delete}: org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: br.com.fotosensores.modelo.Status
javax.faces.el.EvaluationException: org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: br.com.fotosensores.modelo.Status

org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: br.com.fotosensores.modelo.Status

Não sei porque ele pede referencia pela status

sendo que quando deleto o veiculo não seria necessario alterar em nada o status.
=\
Erickson Sousa

Erickson Sousa

Responder

Posts

05/11/2010

Davi Costa

Pelo erro provavelmente o objeto que vc está querendo deletar não veio de uma consulta do banco. Por isso ele não deleta do banco.

Att Davi
Responder

Gostei + 0

05/11/2010

Erickson Sousa

Cara realmente dei um syso(veiculo.getPlaca) e me retornou nulo

meu html e bean estao abaixo
mais lembro de ter visto esse codigo funcionar em uma tabela sem relacionamento

Veiculo.xhtml
<h:form>
     <rich:dataTable id="listVeiculos" rows="14" columnClasses="col" value="#{veiculos.listas}" var="veic">
          <f:facet name="header">
               <h:outputText value="Listagem de Veículos"/>
          </f:facet>
          <rich:column sortBy="#{veic.placa}" filterBy="#{veic.placa}" filterEvent="onkeyup">
               <f:facet name="header">
                    <h:outputText value="Placa"/>
               </f:facet>
               <h:outputText value="#{veic.placa}"/>
          </rich:column>
          <rich:column sortBy="#{veic.descricao}" filterBy="#{veic.descricao}" filterEvent="onkeyup">
               <f:facet name="header">
                    <h:outputText value="Descrição"/>
               </f:facet>
               <h:outputText value="#{veic.descricao}"/>
          </rich:column>
          <rich:column sortBy="#{veic.status.status}" >
               <f:facet name="header">
                    <h:outputText value="Status"/>
               </f:facet>
               <div style="text-align:center">
                    <h:outputText value="#{veic.status.status}"/>
               </div>
          </rich:column>
          <rich:column>
               <f:facet name="header">
                    <h:outputText value="Ações"/>
               </f:facet>
               <a4j:commandLink reRender="formCadastros">
                    <h:outputText value="Atualiza"/>
                    <f:setPropertyActionListener  value="#" target="#{veiculos.veiculo}"/>
               </a4j:commandLink> |
               <a4j:commandLink value="Deletar" action="#{veiculos.delete}" reRender="listVeiculos">
                     <f:setPropertyActionListener value="#{veic.id}" target="#{veiculos.id}" />
               </a4j:commandLink>
          </rich:column>
          <f:facet name="footer">
               <rich:datascroller></rich:datascroller>
          </f:facet>
     </rich:dataTable>
</h:form>


VeiculosBean
    private Veiculo veiculo = new Veiculo();
    private Long id;

    public VeiculosBean() {
        veiculo.setStatus(new Status());
        veiculo.setTipo(new TipoDeVeiculo());
    }

public String delete() {

        VeiculoFacade veiculoService = new VeiculoFacadeImpl();
        this.veiculo.setId(id);
        System.out.println("AAAAAKKKII ==> " + this.veiculo.getPlaca());
        veiculoService.remove(this.veiculo);
        this.veiculo = new Veiculo();

        return "Sucesso";

    }
Responder

Gostei + 0

05/11/2010

Erickson Sousa

Ou nao eh pra mostrar a placa mesmo ja que estou setando apenas o id?

dei o print no id e ta passando direitim e quando printo o getId() tbem aparece direitim
Responder

Gostei + 0

05/11/2010

Erickson Sousa

outra coisa é que mostra isso na mensagem de erro
save the transient instance before flushing: br.com.fotosensores.modelo.Status

tipo isso influencia no delete de veiculos? Oo

fui debugando ateh o DAO

e sepre que mando imprimir o objeto.getId.. ele printa o id do objeto veiculo normalmente

o problema não estaria nesse status?
Responder

Gostei + 0

06/11/2010

Davi Costa

Erickson seguinte,
no seu código não vi sua lista chegar de uma consulta no banco, talvez vc tenha e não tenha postado, se eu não estiver enganado a correção tenha que ser feita aí.
Como pude ver no seu código antes de deletar vc simplesmente só seta o id, para tirar sua dúvida a respeito do Status basta vc setr essa propriedade como null e ver se vai dar o mesmo erro.

Mas cara não tem como deletar setando na mão o id, tem que ser realmente um objeto que veio de uma
consulta do banco, pq esse  objeto se mantém transient, no erro mostra logo o Status pq talvez seja o primeiro objeto q ele quer deletar por isso o erro vem descrito dakela forma.

Att Davi
Responder

Gostei + 0

08/11/2010

Erickson Sousa

Falai davi blz!?

cara realmente q tive q fazer era anular o status e o tipo q tive q fazer

bean
public String delete() {
        VeiculoFacade veiculoService = new VeiculoFacadeImpl();
        this.veiculo.setId(id);
        this.veiculo.setStatus(null);
        this.veiculo.setTipo(null);
        veiculoService.remove(this.veiculo);
        this.veiculo = new Veiculo();
        return "Sucesso";
    }

pro objeto chegar no banco ele ainda passa pelo facade e pelo dao
era isso? Oo

Facade
public void remove(Veiculo v) {
        sf = new AnnotationConfiguration().configure().buildSessionFactory();
        session = sf.openSession();
        tx = session.beginTransaction();
        veiculoDAO = new VeiculoDAO(session, Veiculo.class);
        this.veiculoDAO.delete(v);
        tx.commit();
        session.close();
    }

DAO
public void delete(T t) {
        logger.info("Deletando " + t);
        session.delete(t);
    }

mais no fundo o que precisava mesmo era setar as extenços como null =j

mais uma vez vlw Davi \o/
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar