Bom Dia!!!
Caused by: java.lang.IllegalArgumentException: Removing a detached instance com.wave.erp.orm.cadastro.CanaisVenda#9
Alguém pode me ajudar???
Isto é erro de anotations ou com OO (DAO e Genereic, tallzz)
abraços galere =)
Bom Dia!!!
Caused by: java.lang.IllegalArgumentException: Removing a detached instance com.wave.erp.orm.cadastro.CanaisVenda#9
Alguém pode me ajudar???
Isto é erro de anotations ou com OO (DAO e Genereic, tallzz)
abraços galere =)
É erro de não saber utilizar o JPA mesmo.
Você precisa fazer um find, merge, getReference ou qualquer outra coisa para localizar o objeto antes dele ser excluído.
acho que isso aí é um erro do JPA,
você não pode dar um remove em uma entidade que não está sendo gerenciada, portanto é lançado esse erro.
ICanaisVendaBO
...
public void excluir(Long canaisVendaId) throws ObjectNotFoundException, UserException;
...
CanaisVendaBO
...
@Override
public void excluir(Long canaisVendaId) throws UserException {
try{
@SuppressWarnings("unchecked")
CanaisVenda canaisVenda = canaisVendaFinder.buscarCanaisVendaById(canaisVendaId);
//excluirContatos(canaisVenda);
canaisVendaDAO.excluir(canaisVenda);
}catch(ObjectNotFoundException e){
throw new UserException(e.getMessage());
}
}
@Transactional(propagation=Propagation.MANDATORY)
protected void excluirContatos(CanaisVenda orm) {
try{
CanaisVenda oldCanaisVenda = getCanaisVendaFinder().buscarCanaisVendaById(orm.getId());
Collection<CanaisVendaContato> oldCanaisVendasContatos = oldCanaisVenda.getContato();
if (oldCanaisVendasContatos != null && !oldCanaisVendasContatos.isEmpty()){
for(CanaisVendaContato oldCanaisVendaContato : oldCanaisVendasContatos){
getCanaisVendaDAO().excluir(oldCanaisVendaContato);
}
}
}catch(ObjectNotFoundException e){
throw new UserException(e);
}
}
...
CanaisVendaDAO
...
@Override
public void excluir(CanaisVenda contato) {
super.excluir(contato);
}
...
ICanaisVendaDAO
...
void excluir(CanaisVenda orm);
...
ManterCanaisVenda
...
public JSONReturn excluir(ServletRequest request , ServletResponse response) {
Long canaisVendaId = Long.valueOf(request.getParameter("canaisVendaId"));
try {
canaisVendaBO.excluir(canaisVendaId);
} catch(DataIntegrityViolationException e) { //TODO: Verificar se realmente vai fazer delecao fisica ou apenas logica
String message = GerenciadorMensagem.getMessage("view.mantercanaisvenda.erro.integridade");
return JSONReturn.newInstance(Consequence.ERRO).message(message);
} catch (UserException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ObjectNotFoundException e) {
String messageUser = GerenciadorMensagem.getMessage("view.mantercanaisvenda.deletado.por.outro.usuario");
return JSONReturn.newInstance(Consequence.ERRO).message(messageUser);
}
PaginationHttpSessionStored.setPagination(request,com.wave.erp.cadastro.controller.CacheadorSessao.CACHE_CANAIS_VENDA_PAGINATION, null);
return JSONReturn.newInstance(Consequence.SUCESSO).messageKey("view.exclusao.feita.com.sucesso");
}
...
jakefrog assim vc fala???
E o método que busca a entidade? poste ele também.
CanalVendaFinder.java
...
@Override
@Transactional(propagation=Propagation.REQUIRED, readOnly=true)
public CanaisVenda buscarCanaisVendaById(Long canaisVendaId, IFetchEager<CanaisVenda>... eagers) throws ObjectNotFoundException {
CanaisVenda canaisVenda = em.find(CanaisVenda.class, canaisVendaId);
if (canaisVenda == null){
String mensagem = GerenciadorMensagem.getMessage("canaisvenda.finder.canaisvenda.nao.encontrada");
throw new ObjectNotFoundException(CanaisVendaFinder.class, mensagem);
}else{
FetchEagerUtils.runFetch(canaisVenda, eagers);
}
return canaisVenda;
}
..
Aqui Aplicação Web Completa JSF EJB JPA JAAS
ou aqui Aplicação Web Completa Tomcat JSF Primefaces JPA Hibernate
você encontra o modo correto de fazer.
Vá na página em que mostra o DAO. Lá tem o exemplo correto.
Bom, analisando seu código, eu acredito que o problema está na chamada:FetchEagerUtils.runFetch(canaisVenda, eagers); Algo aí deve fazer esse objeto se tornar detached ao persistence context.
Mas você não precisa dessa chamada para excluir o objeto, talvez seja melhor analisar melhor sua busca.
digaoneves
Consegui mano.
A classe BO no metodo excluir estava sem
@Transactional(propagation=Propagation.REQUIRED)
vlw mano.
obg