[RESOLVIDO] JSP +JPA - ERRO javax.persistence.TransactionRequiredException: Executing an update/delete query

gente, já postei várias vezes a mesma coisa e ninguém responde.
alguém pode me dar uma luz?
o problema dá qd eu tento deletar o usuário.

segue código

@TransactionScoped
public void delete(String codigo) throws Exception {
Consultar consulta = new Consultar ();

EntityManager obconsulta = consulta.getEntityManager();

Query query= obconsulta.createQuery("DELETE CADASTRO_USUARIO U WHERE U.USR_CODIGO='"+codigo+"'");

   
   query.executeUpdate();
((EntityManager) query).getTransaction().commit();

}

}

Sem dizer qual o problema ou o stacktrace fica difícil mesmo alguém responder.

o console está retornando esse erro.

INFO: HHH000397: Using ASTQueryTranslatorFactory
javax.persistence.TransactionRequiredException: Executing an update/delete query
at org.hibernate.query.internal.AbstractProducedQuery.executeUpdate(AbstractProducedQuery.java:1496)
at com.cleiton.consultasAtualizarDeletar.ListarUsuarios.delete(ListarUsuarios.java:43)
at servlet.ServletCadastrousuario.doGet(ServletCadastrousuario.java:35)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:624)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:218)

o erro aparece quando tento deletar um registros.

Se estiver usando Spring, não está faltando usar o @Transactional? Com isso deverá retirar o commit feito na mão. Estou supondo por nao ter mostrado o código completo. Fora isso, veja se essas respostas te ajudam:

1 curtida

já tinha visto esse forum antes. fiz todos o procedimentos e continua no mesmo erro.
o método que faz a exclusão do registro é esse.

@Transactional
public void delete(String codigo) throws Exception {
Consultar consulta = new Consultar ();

EntityManager obconsulta = consulta.getEntityManager();

Query query= obconsulta.createQuery("DELETE CADASTRO_USUARIO U WHERE U.USR_CODIGO='"+codigo+"'");

   
   query.executeUpdate();
//((EntityManager) query).getTransaction().commit();

}

}

package servlet;

import java.io.IOException;

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 javax.transaction.Transactional;

import com.cleiton.cadastro.Usuario;
import com.cleiton.consultasAtualizarDeletar.ListarUsuarios;
import com.cleiton.topicos2.SalvarUsuario;

@WebServlet("/salvarusuario")
public class ServletCadastrousuario extends HttpServlet {
private static final long serialVersionUID = 1L;
private ListarUsuarios listarusuarios;
private SalvarUsuario salvarUsuario = new com.cleiton.topicos2.SalvarUsuario();
public ServletCadastrousuario() {

	 listarusuarios = new ListarUsuarios();

 }

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

//	response.getWriter().append("Served at: ").append(request.getContextPath());
	 try {
		    String acao = request.getParameter("acao");
		   String user = request.getParameter("user");
		      if (acao.equalsIgnoreCase("delete")) {
		         listarusuarios.delete(user);
		          RequestDispatcher view = request.getRequestDispatcher("/menu.jsp");
		          request.setAttribute("codigo", listarusuarios.listaTodos());
		          view.forward(request, response);
				
				
		              }
		          }
		  catch (Exception e) {
		      e.printStackTrace();
		          }
}


protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	
	String nome = request.getParameter("Nome");
	String cpf = request.getParameter("CPF");
	String email = request.getParameter("Email");
	String senha = request.getParameter("Senha");
	String telresidencial = request.getParameter("Residencial");
	String celular = request.getParameter("Celular");
	String cep = request.getParameter("Cep");
	String numero = request.getParameter("Numero");
	String logradouro = request.getParameter("Logradouro");
	String bairro = request.getParameter("Bairro");
	String localidade = request.getParameter("Localidade");
	String estado = request.getParameter("Estado");
	
	
	Usuario usuario = new Usuario();
	
	usuario.setUSR_NOME(nome);
	usuario.setUSR_CPF(cpf);
	usuario.setUSR_EMAIL(email);
	usuario.setUSR_SENHA(senha);
	usuario.setUSR_TELEFONE(telresidencial);
	usuario.setUSR_CELULAR(celular);
	usuario.setUSR_CEP(cep);
	usuario.setUSR_NUMERO(numero);
	usuario.setUSR_LOGRADOURO(logradouro);
	usuario.setUSR_BAIRRO(bairro);
	usuario.setUSR_LOCALIDADE(localidade);
	usuario.setUSR_ESTADO(estado);
	
	

	salvarUsuario.salvar(usuario);
	RequestDispatcher r = request.getRequestDispatcher( "login.jsp" );
	r.forward( request, response );
	
}

}

<?xml version="1.0" encoding="UTF-8"?>

<persistence-unit name="teste" transaction-type="RESOURCE_LOCAL">
	
	<properties>
		<property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/sistema_escolar"/>
		<property name="javax.persistence.jdbc.user" value="root"/>
		<property name="javax.persistence.jdbc.password" value="root"/>
		<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
		
		<!-- validate | update | create | create-drop -->
		<property name="hibernate.hbm2ddl.auto" value="update"/>
        <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/>

	

</persistence-unit>

Faltou o applicationContext.xml.

Recomendo criar um projeto do zero só pra estudar sobre assunto, antes de aplicar no seu projeto.

Voce pode tambem nao usar @TransactionScoped e iniciar e commitar a transacao por conta propria. Só nao pode apenas commitar como voce estava fazendo no inicio.

é por isso que odeio java. tudo em java tem q ser difícil.
tenho até quinta-feira pra entregar esse trabalho.

Tem razao, Java é complicado. Entao busque fazer o feijao com a arroz pra nao se complicar, sem usar mágicas em que voce nao domine os segredos. Se possivel nem use JPA.

Sobre pontualmente seu caso da transacao, retire toda mágica envolvendo annotation de transacao e inicia/commita a transacao por conta propria. Exemplo:

o professor quer que eu utilize jpa.
vou estudar mais! obrigado pela ajuda.
abraços!!

fiz dessa forma e funcionou!!
obrigado man.