Olá amigos!
Estou tendo problemas para fazer uma exclusão no modo formulário já implementei no modo consulta com uma Lista, mas ao excluir a sessão da consulta, cai! e agora a solução é no modo formulário.
Ele reproduz o seguinte erro:
dez 15, 2022 8:32:54 AM org.apache.catalina.core.StandardWrapperValve invoke
GRAVE: Servlet.service() for servlet [com.algaworks.estoque.servlet.ExcluirProdutoServlet] in context with path [/estoqueTreina] threw exception
java.lang.IllegalArgumentException: Removing a detached instance com.algaworks.estoque.model.Produto#99
at org.hibernate.jpa.event.internal.core.JpaDeleteEventListener.performDetachedEntityDeletionCheck(JpaDeleteEventListener.java:69)
at org.hibernate.event.internal.DefaultDeleteEventListener.onDelete(DefaultDeleteEventListener.java:106)
at org.hibernate.event.internal.DefaultDeleteEventListener.onDelete(DefaultDeleteEventListener.java:73)
at org.hibernate.internal.SessionImpl.fireDelete(SessionImpl.java:920)
at org.hibernate.internal.SessionImpl.delete(SessionImpl.java:896)
at org.hibernate.jpa.spi.AbstractEntityManagerImpl.remove(AbstractEntityManagerImpl.java:1214)
at com.algaworks.estoque.repository.Produtos.excluir(Produtos.java:27)
at com.algaworks.estoque.service.ExcluirProdutoService.ExcluiProduto(ExcluirProdutoService.java:17)
at com.algaworks.estoque.servlet.ExcluirProdutoServlet.doPost(ExcluirProdutoServlet.java:69)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:681)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:764)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
at com.algaworks.estoque.filter.AutorizacaoFilter.doFilter(AutorizacaoFilter.java:30)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:197)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:135)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:687)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:360)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:399)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:890)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1743)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191)
at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:750)
Aqui esta o projeto:
https://github.com/wdevjr/java.total.base/tree/master/estoqueTreina
Preciso de ajuda! E mais uma vez Obrigado aos mestres de Plantão!
Aguardo contato!
Aqui esta a classe:
package com.algaworks.estoque.servlet;
import java.io.IOException;
import java.math.BigDecimal;
import javax.persistence.EntityManager;
import javax.persistence.EntityTransaction;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.algaworks.estoque.model.Produto;
import com.algaworks.estoque.repository.Produtos;
import com.algaworks.estoque.service.ExcluirProdutoService;
import com.algaworks.estoque.service.ServiceException;
import com.algaworks.estoque.util.JpaUtil;
@WebServlet("/exclui-produto")
public class ExcluirProdutoServlet extends HttpServlet{
private static final long serialVersionUID = 1L;
private String id;
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
EntityManager manager = JpaUtil.getEntityManager();
Produtos produtos = new Produtos(manager);
Produto produto = new Produto();
this.id = request.getParameter("id");
// try {
produto = produtos.consultarPorId(new Long(id));
request.setAttribute("produtos", produto);
//
// } catch (Exception e) {
// request.setAttribute("mensagem", "Produtos/problemas .... "+e.getMessage());
// doGet(request, response);
// response.sendRedirect("exclui-produtos");
// }
RequestDispatcher dispatcher = request.getRequestDispatcher(
"/paginas/exclui-produto.jsp");
dispatcher.forward(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//this.doGet(request, response);
EntityManager manager = JpaUtil.getEntityManager();
EntityTransaction trx = manager.getTransaction();
Produtos produtos = new Produtos(manager);
Produto produtoUx = new Produto();
produtoUx.setId(new Long(request.getParameter("id")));
produtoUx.setNome(request.getParameter("nome"));
produtoUx.setPrecoCusto(new BigDecimal(request.getParameter("precoCusto")));
produtoUx.setQuantidadeEstoque(new Integer(request.getParameter("quantidadeEstoque")));
//Long idProduto = new Long(request.getParameter("id"));
String mensagem = null;
try {
ExcluirProdutoService servico = new ExcluirProdutoService(new Produtos(manager));
trx.begin();
servico.ExcluiProduto(produtoUx);
trx.commit();
mensagem = "Produto Excluido com sucesso!";
} catch (ServiceException e) {
e.printStackTrace();
} finally {
if (trx.isActive()) trx.rollback();
manager.close();
}
// response.sendRedirect(request.getContextPath() +
// "/paginas/consulta-produtos.jsp");
RequestDispatcher dispatcher2 = request.getRequestDispatcher("/paginas/exclui-produto.jsp");
dispatcher2.forward(request, response);
request.setAttribute("mensagem", mensagem);
//doGet(request, response);
}
}
Saudações meu amigoo!
Por hora está um pouco confuso seu código, mas vou observando aqui.
Fica aqui um link onde pode te ajudar a exclarecer esse erro e talvez te dar a luz necessária.
olá @javaDesk, seja objetivo no título da questão, ajuda muito. Não há necessidade de usar 'Gurus de plantão'
ou algo que fosse uma continuação de outro tópico 'Problemas para excluir agora no modo formulário'
.
Apenas coloque que está com problemas para excluir os dados.
1 curtida
Vc está tentando excluir uma entidade que não está no estado managed, ou seja, não está gerenciada pelo JPA.
Uma entidade gerenciada pelo JPA são basicamente aquelas que foram carregadas do banco pelo JPA. Uma coisa que caracteriza uma entidade gerenciada é ter o ID preenchido, mas não somente isso, é preciso que ela esteja numa área onde o JPA faz um controle especial sobre todas as entidades que estão sendo manipuladas no momento.
Para fazer a remoção de forma correta, vc deve recuperar a entidade pelo ID e, só então, invocar o método de remover.
1 curtida
ok. Perfil - Lucas_Camara - GUJ, deu certo!
Obrigado mais uma vez
Bom trabalho a todos
1 curtida