Fórum Agora o problema é para deletar =\ #390037
05/11/2010
0
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
Curtir tópico
+ 0Posts
05/11/2010
Davi Costa
Att Davi
Gostei + 0
05/11/2010
Erickson Sousa
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";
}
Gostei + 0
05/11/2010
Erickson Sousa
dei o print no id e ta passando direitim e quando printo o getId() tbem aparece direitim
Gostei + 0
05/11/2010
Erickson Sousa
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?
Gostei + 0
06/11/2010
Davi Costa
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
Gostei + 0
08/11/2010
Erickson Sousa
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/
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)