Error while committing the transaction(RESOLVIDO)

2 respostas
javahibernate
rodrigosnantes

Tenho duas entidades CLIENTE e VEICULO.
Consigo fazer o cadastro das duas normalmente, porem estou com dificuldade para fazer a atualizacão devido ao vinculo que uma tem com a outra. (OneToMany)

Para cadastrar um cliente eu adiciono um veiculo assim.

public void cadastrarCarro() {
		this.veiculo.setCliente(cliente);
		this.cliente.getVeiculo().add(this.veiculo);
	}

com as informacoes preenchidas na tela eu salvo.

public void salvar() {
		cadastrarCarro();
		this.cadastroClienteService.salvar(this.cliente);

		FacesUtil.addInforMessage("Cadastro Salvo com sucesso!");
	}

Porem para fazer a edicão, como um cliente pode ter um ou mais veiculos, decidi editar um cliente de forma separada do veiculo, e veiculo de forma separada do cliente.

Porem estou recebendo o seguinte alerta ao tentar atualizar as informacoes do cliente.

ADVERTÊNCIA: #{cadastroClienteBean.salvar}: javax.persistence.RollbackException: Error while committing the transaction
javax.faces.FacesException: #{cadastroClienteBean.salvar}: javax.persistence.RollbackException: Error while committing the transaction
	at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:118)
	at javax.faces.component.UICommand.broadcast(UICommand.java:315)
	at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:790)
	at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1282)
	at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)
	at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
	at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:198)
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:658)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:490)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
	at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:668)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
	at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:408)
	at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
	at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:770)
	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1415)
	at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
	at java.lang.Thread.run(Unknown Source)
Caused by: javax.faces.el.EvaluationException: javax.persistence.RollbackException: Error while committing the transaction
	at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:101)
	at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)
	... 29 more
Caused by: javax.persistence.RollbackException: Error while committing the transaction
	at org.hibernate.ejb.TransactionImpl.commit(TransactionImpl.java:92)
	at util.jpa.TransactionInterceptor.invoke(TransactionInterceptor.java:47)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at org.jboss.weld.interceptor.proxy.SimpleMethodInvocation.invoke(SimpleMethodInvocation.java:30)
	at org.jboss.weld.interceptor.proxy.SimpleInterceptionChain.invokeNextInterceptor(SimpleInterceptionChain.java:69)
	at org.jboss.weld.interceptor.proxy.InterceptorMethodHandler.executeInterception(InterceptorMethodHandler.java:112)
	at org.jboss.weld.interceptor.proxy.InterceptorMethodHandler.invoke(InterceptorMethodHandler.java:88)
	at org.jboss.weld.bean.proxy.CombinedInterceptorAndDecoratorStackMethodHandler.invoke(CombinedInterceptorAndDecoratorStackMethodHandler.java:55)
	at service.CadastroClienteService$Proxy$_$$_WeldSubclass.salvar(CadastroClienteService$Proxy$_$$_WeldSubclass.java)
	at Controller.CadastroClienteBean.salvar(CadastroClienteBean.java:42)
	at Controller.CadastroClienteBean$Proxy$_$$_WeldClientProxy.salvar(CadastroClienteBean$Proxy$_$$_WeldClientProxy.java)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at org.apache.el.parser.AstValue.invoke(AstValue.java:247)
	at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:267)
	at org.jboss.weld.util.el.ForwardingMethodExpression.invoke(ForwardingMethodExpression.java:39)
	at org.jboss.weld.el.WeldMethodExpression.invoke(WeldMethodExpression.java:50)
	at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105)
	at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:87)
	... 30 more
Caused by: javax.validation.ConstraintViolationException: Validation failed for classes [model.Veiculo] during persist time for groups [javax.validation.groups.Default, ]
List of constraint violations:[
	ConstraintViolationImpl{interpolatedMessage='não pode ser nulo', propertyPath=placa, rootBeanClass=class model.Veiculo, messageTemplate='{javax.validation.constraints.NotNull.message}'}
]
	at org.hibernate.cfg.beanvalidation.BeanValidationEventListener.validate(BeanValidationEventListener.java:159)
	at org.hibernate.cfg.beanvalidation.BeanValidationEventListener.onPreInsert(BeanValidationEventListener.java:94)
	at org.hibernate.action.internal.EntityInsertAction.preInsert(EntityInsertAction.java:181)
	at org.hibernate.action.internal.EntityInsertAction.execute(EntityInsertAction.java:81)
	at org.hibernate.engine.spi.ActionQueue.execute(ActionQueue.java:377)
	at org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:369)
	at org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:286)
	at org.hibernate.event.internal.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:339)
	at org.hibernate.event.internal.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:52)
	at org.hibernate.internal.SessionImpl.flush(SessionImpl.java:1234)
	at org.hibernate.internal.SessionImpl.managedFlush(SessionImpl.java:404)
	at org.hibernate.engine.transaction.internal.jdbc.JdbcTransaction.beforeTransactionCommit(JdbcTransaction.java:101)
	at org.hibernate.engine.transaction.spi.AbstractTransactionImpl.commit(AbstractTransactionImpl.java:175)
	at org.hibernate.ejb.TransactionImpl.commit(TransactionImpl.java:75)
	... 53 more

Poderiam me ajudar a contornar a situação ?

att;

2 Respostas

peczenyj
Caused by: javax.validation.ConstraintViolationException: Validation failed for classes [model.Veiculo] during persist time for groups [javax.validation.groups.Default, ]
List of constraint violations:[
	ConstraintViolationImpl{interpolatedMessage='não pode ser nulo', propertyPath=placa, rootBeanClass=class model.Veiculo, messageTemplate='{javax.validation.constraints.NotNull.message}'}
]

parece que a placa do carro não pode ser nula…

rodrigosnantes

Sim é porque quando eu estou simplesmente cadastrando eu estou iniciando o meu construtor dando um new veiculo, dai eu jogo as informacoes do veiculo e persisto junto com o cliente.

Porem e no caso de atualizar apenas os dados relacionados ao cliente e NÃO ao veiculo.? Ele esta nulo pq eu nao estou conseguindo identificar alguma forma de dar um new veiculo quando a pagina de edição de cliente está aberta. Dessa forma pelo relacionamento ele pede que eu instancie o veiculo tbm. Eu teria que persistir a atualizacao dos dados feitos no cliente, sem interferir nos dados do veiculo deste mesmo cliente, compreende ?

veja na minha tela de cadastro eu tenho isso. Cadastro o Cliente e 1 veiculo relacionado a ele.

Entao eu instancio assim

public CadastroClienteBean() {
		limpar();
	}

public void limpar() {
		cliente = new Cliente();
		this.veiculo = new Veiculo();
	}

	public void cadastrarCarro() {
		this.veiculo.setCliente(cliente);
		this.cliente.getVeiculo().add(this.veiculo);
	}

	public void salvar() {
		cadastrarCarro();
		this.cadastroClienteService.salvar(this.cliente);

		FacesUtil.addInforMessage("Cadastro Salvo com sucesso!");
	}

Porem para editar, eu tenho apenas isso.

Veja que ele ja carrega a tela de cliente com as informacoes relacionadas e ele, sem o veiculo, exatamente oque preciso, porem se eu atualizo alguma informação dele e tento salvar ele da aquele erro la em cima.
Desculpa, au ainda to iniciando em java web. Tenho pouca experiencia, entao nao sei se fui claro. qualquer coisa so perguntar.

Criado 30 de outubro de 2018
Ultima resposta 30 de out. de 2018
Respostas 2
Participantes 2