javaflex 20 de nov. de 2017
Sem dizer qual o problema ou o stacktrace fica difícil mesmo alguém responder.
Cleiton_Conceicao 20 de nov. de 2017
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 20 de nov. de 2017
o erro aparece quando tento deletar um registros.
javaflex 20 de nov. de 2017 1 like
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 21 de nov. de 2017
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 21 de nov. de 2017
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 = 1 L ;
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 21 de nov. de 2017
<?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 21 de nov. de 2017
Faltou o applicationContext.xml.
Recomendo criar um projeto do zero só pra estudar sobre assunto, antes de aplicar no seu projeto.
javaflex 21 de nov. de 2017
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 21 de nov. de 2017
é por isso que odeio java. tudo em java tem q ser difícil.
tenho até quinta-feira pra entregar esse trabalho.
javaflex 21 de nov. de 2017
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:
Por que você não usa assim? public void removerPorChave(Class objeto, Integer chave) { EntityManager em = getEntityManager(); EntityTransaction etx = em.getTransaction(); try { etx.begin(); Object x = getEntity(objeto, chave); Object y = em.merge(x); em.remove(y); etx.commit; } catch (RuntimeException e) { etx.rollback(); //não deveria desfazer o objeto deletado aqui?!?!…
Cleiton_Conceicao 21 de nov. de 2017
o professor quer que eu utilize jpa.
vou estudar mais! obrigado pela ajuda.
abraços!!
Cleiton_Conceicao 21 de nov. de 2017
fiz dessa forma e funcionou!!
obrigado man.