Ir para conteúdo
Fórum CódigoFonte.net
sandrofolk

Como capturar raise exception de validação do postgresql com hibernate

Recommended Posts

Estou em meu primeiro projeto em Java!
Estou utilizando Hibernate com JSF.
Utilizo banco postgresql, e tenho algumas triggers que disparam raises como por exemplo:

Raise Exception 'Operação não permitida!';

 

Não sei como fazer para capturar esse trecho do erro para mostrar na página web!

Segue detalhes do meu código:

Método no Controller

	@Transactional
	public String saveItem() {
		try {
			solitpedService.save(solitpedEdit);

			MessageHandler.placeInfoMessage("item_save_success",
					String.valueOf(solitpedEdit.getId().getNnumeroitped()));

			return callback();
		} catch (PersistEntityException e) {
			MessageHandler.placeErrorMessage("item_save_error");
			logger.error("Error on save item");
			e.printStackTrace();

			return Constants.PAGE_NULL;
		}
	}

 

Classe PersistEntityException

	public class PersistEntityException extends Exception {

		private static final long serialVersionUID = 6962204158729560915L;

		public PersistEntityException() { }

		public PersistEntityException(String msg) {
			super(msg);
		}

		public PersistEntityException(String error, Exception e) {
			super(error, e);
		}
	}

 

Método no Service

	@Override
	public Solitped save(Solitped solitped) throws PersistEntityException {
		return solitpedDAO.createNew(solitped);
	}

 

Método no DAO

    @Override
    public T createNew(T entityBean) throws PersistEntityException {
    	try {
    		getEntityManager().persist(entityBean);
    	} catch (EntityExistsException e) {
			throw new PersistEntityException("Entity already exists.");
		} catch (IllegalArgumentException e) {
			throw new PersistEntityException("The argument is not an entity.");
		} catch (TransactionRequiredException e) {
			throw new PersistEntityException("No Transaction active.");
		} catch (Exception e) {
			throw new PersistEntityException("Error while persisting entity.");
		}
    	return entityBean;
    }

 

Saída do Console

Hibernate: insert into MINHATABELA (CAMPO1, ...) values (?, ...)
Nov 18, 2015 9:04:48 AM com.sun.faces.lifecycle.InvokeApplicationPhase execute
ADVERTÊNCIA: #{solpedidController.saveItem()}: javax.persistence.PersistenceException: org.hibernate.exception.GenericJDBCException: could not execute statement
javax.faces.FacesException: #{solpedidController.saveItem()}: javax.persistence.PersistenceException: org.hibernate.exception.GenericJDBCException: could not execute statement
	at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:117)
	at javax.faces.component.UICommand.broadcast(UICommand.java:315)
	at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:791)
	at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1256)
	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:118)
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:593)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
	at org.primefaces.webapp.filter.FileUploadFilter.doFilter(FileUploadFilter.java:100)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
	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.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
	at org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter.doFilterInternal(OpenEntityManagerInViewFilter.java:177)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330)
	at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:118)
	at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:84)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
	at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
	at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:103)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
	at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:113)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
	at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:154)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
	at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:45)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
	at org.springframework.security.web.authentication.www.BasicAuthenticationFilter.doFilter(BasicAuthenticationFilter.java:150)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
	at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:199)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
	at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:110)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
	at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:50)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
	at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:87)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
	at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:192)
	at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:160)
	at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:344)
	at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:261)
	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:220)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:505)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:956)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:423)
	at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1079)
	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:625)
	at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:318)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
	at java.lang.Thread.run(Thread.java:745)
Caused by: javax.faces.el.EvaluationException: javax.persistence.PersistenceException: org.hibernate.exception.GenericJDBCException: could not execute statement
	at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:101)
	at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:101)
	... 69 more
Caused by: javax.persistence.PersistenceException: org.hibernate.exception.GenericJDBCException: could not execute statement
	at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1387)
	at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1310)
	at org.hibernate.ejb.QueryImpl.getResultList(QueryImpl.java:277)
	at com.km.web.latim.dao.SolitpedDAOImp.findBySolpedid(SolitpedDAOImp.java:35)
	at com.km.web.latim.service.SolitpedServiceImp.findBySolpedid(SolitpedServiceImp.java:51)
	at com.km.web.latim.controller.SolpedidController.loadSolitpedList(SolpedidController.java:247)
	at com.km.web.latim.controller.SolpedidController.saveItem(SolpedidController.java:830)
	at com.km.web.latim.controller.SolpedidController$$FastClassBySpringCGLIB$$c99dc484.invoke(<generated>)
	at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)
	at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:708)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157)
	at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:98)
	at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:262)
	at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:95)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
	at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:644)
	at com.km.web.latim.controller.SolpedidController$$EnhancerBySpringCGLIB$$c90e093e.saveItem(<generated>)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:606)
	at org.apache.el.parser.AstValue.invoke(AstValue.java:278)
	at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:273)
	at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105)
	at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:87)
	... 70 more
Caused by: org.hibernate.exception.GenericJDBCException: could not execute statement
	at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:54)
	at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:125)
	at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:110)
	at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:136)
	at org.hibernate.engine.jdbc.batch.internal.NonBatchingBatch.addToBatch(NonBatchingBatch.java:58)
	at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:3081)
	at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:3523)
	at org.hibernate.action.internal.EntityInsertAction.execute(EntityInsertAction.java:88)
	at org.hibernate.engine.spi.ActionQueue.execute(ActionQueue.java:393)
	at org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:385)
	at org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:301)
	at org.hibernate.event.internal.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:339)
	at org.hibernate.event.internal.DefaultAutoFlushEventListener.onAutoFlush(DefaultAutoFlushEventListener.java:62)
	at org.hibernate.internal.SessionImpl.autoFlushIfRequired(SessionImpl.java:1211)
	at org.hibernate.internal.SessionImpl.list(SessionImpl.java:1268)
	at org.hibernate.internal.QueryImpl.list(QueryImpl.java:101)
	at org.hibernate.ejb.QueryImpl.getResultList(QueryImpl.java:268)
	... 92 more
Caused by: org.postgresql.util.PSQLException: ERRO: solerror: NÃO QUERO QUE SEJA FEITO ISSO.
	at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2102)
	at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1835)
	at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:257)
	at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:500)
	at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:388)
	at org.postgresql.jdbc2.AbstractJdbc2Statement.executeUpdate(AbstractJdbc2Statement.java:334)
	at com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.executeUpdate(NewProxyPreparedStatement.java:147)
	at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:133)
	... 105 more

 

Página XHTML

<?xml version="1.0" encoding="UTF-8"?>
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
	xmlns:h="http://java.sun.com/jsf/html"
	xmlns:f="http://java.sun.com/jsf/core"
	xmlns:ui="http://java.sun.com/jsf/facelets"
	xmlns:p="http://primefaces.org/ui">

	<ui:include src="../solempre/panel.xhtml"/>
	<ui:include src="breadCrumbEdit.xhtml" />

	<h:form id="manageForm" prependId="false">
		<p:messages id="messages" autoUpdate="true" closable="true" />
	
    	<p:panelGrid columns="2" columnClasses="ui-grid-col-2,ui-grid-col-10" layout="grid" styleClass="ui-panelgrid-blank">
			<p:outputLabel value="#{msg.item_product}">
				<span class="required">*</span>
			</p:outputLabel>
			<p:selectOneMenu id="itemProductId"
				converter="solproduConverter" 
				value="#{solpedidController.solproduEdit}" 
				required="true" 
				requiredMessage="#{msg.item_product_required}"
				styleClass="WidAutoOnMobile"
				effect="fade" filter="true" filterMatchMode="contains">
        		<f:selectItem itemLabel="#{msg.global_select_one}" itemValue="" noSelectionOption="true" />
        		<f:selectItems value="#{solpedidController.solproduList}" 
        			var="_solprodu" 
        			itemLabel="#{_solprodu.cnomeprodu}" 
        			itemValue="#{_solprodu}"/>
    		</p:selectOneMenu>

			<p:outputLabel value="#{msg.item_qtd}"/>
			<p:inputText id="itemQtdId"
				value="#{solpedidController.solitpedEdit.nquatdeitped}"
				requiredMessage="#{msg.item_qtd_required}"
				styleClass="WidAutoOnMobile"/>
				
			<p:outputLabel value="#{msg.item_price}"/>
			<p:inputText id="itemPriceId"
				value="#{solpedidController.solitpedEdit.nprecoitped}"
				requiredMessage="#{msg.item_price_required}"
				styleClass="WidAutoOnMobile">
				<f:convertNumber pattern="#,##0.00"></f:convertNumber>  
			</p:inputText>

		</p:panelGrid>
		
		<p:panel>
			<p:commandButton id="save"
				icon="fa fa-save" 
				action="#{solpedidController.saveItem()}"
				value="#{msg.global_save}"
				update="manageForm" 
				ajax="true"
				rendered="#{!solpedidController.idDefinedItem()}">
				<f:param name="nnumeropedid" value="#{solpedidController.solpedidEdit.nnumeropedid}"/>
				<f:param name="tabActive" value="#{solpedidController.tabActive}"/>
	  			<p:tooltip for="save" value="#{msg.tooltip_save}" />
			</p:commandButton>

			<p:commandButton id="update"
				icon="fa fa-refresh" 
				action="#{solpedidController.updateItem()}"
				value="#{msg.global_update}"
				update="manageForm"
				ajax="true"
				rendered="#{solpedidController.idDefinedItem()}">
				<f:param name="nnumeropedid" value="#{solpedidController.solpedidEdit.nnumeropedid}"/>
				<f:param name="tabActive" value="#{solpedidController.tabActive}"/>
	  			<p:tooltip for="update" value="#{msg.tooltip_update}" />
			</p:commandButton>
			
			<p:commandButton id="cancel"
				value="#{msg.global_cancel}" 
				icon="fa fa-close"
				action="#{solpedidController.cancelItem()}"
				immediate="true"
				ajax="true">
				<f:param name="nnumeropedid" value="#{solpedidController.solpedidEdit.nnumeropedid}"/>
				<f:param name="tabActive" value="#{solpedidController.tabActive}"/>
	  			<p:tooltip for="cancel" value="#{msg.tooltip_cancel}" />
			</p:commandButton>
		</p:panel>
	</h:form>
</ui:composition>

 

Preciso que esse trecho do erro:

solerror: NÃO QUERO QUE SEJA FEITO ISSO.

 

Seja exibido em meu p:message:

<p:messages id="messages" autoUpdate="true" closable="true" />

 

Alguma sugestão?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Visitante
Responder

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Processando...

×
×
  • Criar Novo...