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

13 respostas
jsp
Cleiton_Conceicao

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();

}

}

13 Respostas

javaflex

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

Cleiton_Conceicao

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)
Cleiton_Conceicao

o erro aparece quando tento deletar um registros.

javaflex

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:

Cleiton_Conceicao

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();

}

}

Cleiton_Conceicao

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 );
	
}

}

Cleiton_Conceicao
<?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>
javaflex

Faltou o applicationContext.xml.

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

javaflex

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.

Cleiton_Conceicao

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

javaflex

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:

Cleiton_Conceicao

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

Cleiton_Conceicao

fiz dessa forma e funcionou!!
obrigado man.

Criado 20 de novembro de 2017
Ultima resposta 21 de nov. de 2017
Respostas 13
Participantes 2