Amigos, estou com o seguinte problema tenho os seguintes metodos:
@Transactional(propagation = Propagation.REQUIRED, rollbackFor = {Exception.class })
public boolean enviarMensagem(TbMensagem mensagem,
List<TbItemMensagem> itemMensagemList,
List<TbCaixaMensagemInstituicao> caixaCartorioDestinatarioList,
TbUsuario usuario) throws Exception {
if (((itemMensagemList == null) || itemMensagemList.size() <= 0)
&& ((caixaCartorioDestinatarioList == null) || caixaCartorioDestinatarioList
.size() <= 0)) {
return true;
}
List<TbDestinatarioMensagem> destinatarioList = new java.util.ArrayList<TbDestinatarioMensagem>();
for (TbCaixaMensagemInstituicao caixaCartorioDestinatario : caixaCartorioDestinatarioList) {
TbDestinatarioMensagem destinatario = new TbDestinatarioMensagem();
destinatario
.setTbCaixaMensagemInstituicao(caixaCartorioDestinatario);
destinatario.setTbMensagem(mensagem);
destinatarioList.add(destinatario);
}
mensagem.setTbDestinatarioMensagemList(destinatarioList);
mensagem.setTbUsuario(usuario);
mensagem.setTbCaixaMensagemInstituicao(caixaMensagemInstituicaoService
.getCaixaMensagemUsuario(usuario));
if (usuario.getIcUsuarioEnvioDireto() == true) {
mensagem.setCdStatusMensagem(StatusMensagem.APROVADO
.getStatusMensagem());
} else {
mensagem.setCdStatusMensagem(StatusMensagem.PENDENTE
.getStatusMensagem());
}
this.mensagemDao.save(mensagem);
return addItemMensagem(itemMensagemList, mensagem.getCdMensagem());
}[/code]
[code] @Transactional(propagation = Propagation.REQUIRED, rollbackFor = { Exception.class })
private boolean addItemMensagem(List<TbItemMensagem> itemMensagemList,
int cdMensagem) throws PropertyValueException, Exception, DataIntegrityViolationException{
for (TbItemMensagem itemMensagem : itemMensagemList) {
// itemMensagem.setCdMensagem(cdMensagem);
this.mensagemDao.save(itemMensagem);
}
return true;
}[/code]
A duvida e a seguinte,. eu chamo o metodo enviarMensagem();
e estou simulando um erro no addItemMensagem() que e deixar um campo que nao pode ser nullo(cdMensagem) como nullo para gerar erro, o problema e que ele nao esta fazendo o rollback da mensagem, mesmo dando erro, ele insere a mensagem, nao teria que dar rollback por causa das annotations
[code]@Transactional(propagation = Propagation.REQUIRED, rollbackFor = { Exception.class, DataIntegrityViolationException.class, PropertyValueException.class })[/code] ????
ele me retorna o erro abaixo:( ja tentei colocar o rollbackFor para a DataIntegrityViolationException e tbm PropertyValueException, porem nao da o rollback)
alguem pode me ajudar
[code]org.springframework.dao.DataIntegrityViolationException: not-null property references a null or transient value: br.com.dnasolution.cartorioseletronicos.entity.TbItemMensagem.cdMensagem; nested exception is org.hibernate.PropertyValueException: not-null property references a null or transient value: br.com.dnasolution.cartorioseletronicos.entity.TbItemMensagem.cdMensagem
at org.springframework.orm.hibernate3.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:645)
at org.springframework.orm.hibernate3.HibernateAccessor.convertHibernateAccessException(HibernateAccessor.java:412)
at org.springframework.orm.hibernate3.HibernateTemplate.doExecute(HibernateTemplate.java:424)
at org.springframework.orm.hibernate3.HibernateTemplate.executeWithNativeSession(HibernateTemplate.java:374)
at org.springframework.orm.hibernate3.HibernateTemplate.save(HibernateTemplate.java:694)
at br.com.dnasolution.cartorioseletronicos.dao.MensagemDao.save(MensagemDao.java:74)
at br.com.dnasolution.cartorioseletronicos.service.MensagemService.addItemMensagem(MensagemService.java:90)
at br.com.dnasolution.cartorioseletronicos.service.MensagemService.enviarMensagem(MensagemService.java:161)
at br.com.dnasolution.cartorioseletronicos.service.MensagemService.testaEnviarMensagem(MensagemService.java:119)
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 flex.messaging.services.remoting.adapters.JavaAdapter.invoke(JavaAdapter.java:421)
at flex.messaging.services.RemotingService.serviceMessage(RemotingService.java:183)
at flex.messaging.MessageBroker.routeMessageToService(MessageBroker.java:1503)
at flex.messaging.endpoints.AbstractEndpoint.serviceMessage(AbstractEndpoint.java:884)
at flex.messaging.endpoints.AbstractEndpoint$$FastClassByCGLIB$$1a3ef066.invoke(<generated>)
at net.sf.cglib.proxy.MethodProxy.invoke(MethodProxy.java:149)
at org.springframework.aop.framework.Cglib2AopProxy$CglibMethodInvocation.invokeJoinpoint(Cglib2AopProxy.java:700)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149)
at org.springframework.flex.core.MessageInterceptionAdvice.invoke(MessageInterceptionAdvice.java:59)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
at org.springframework.aop.framework.adapter.ThrowsAdviceInterceptor.invoke(ThrowsAdviceInterceptor.java:126)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
at org.springframework.aop.framework.Cglib2AopProxy$FixedChainStaticTargetInterceptor.intercept(Cglib2AopProxy.java:582)
at flex.messaging.endpoints.AMFEndpoint$$EnhancerByCGLIB$$a985151a.serviceMessage(<generated>)
at flex.messaging.endpoints.amf.MessageBrokerFilter.invoke(MessageBrokerFilter.java:121)
at flex.messaging.endpoints.amf.LegacyFilter.invoke(LegacyFilter.java:158)
at flex.messaging.endpoints.amf.SessionFilter.invoke(SessionFilter.java:44)
at flex.messaging.endpoints.amf.BatchProcessFilter.invoke(BatchProcessFilter.java:67)
at flex.messaging.endpoints.amf.SerializationFilter.invoke(SerializationFilter.java:146)
at flex.messaging.endpoints.BaseHTTPEndpoint.service(BaseHTTPEndpoint.java:278)
at flex.messaging.endpoints.AMFEndpoint$$EnhancerByCGLIB$$a985151a.service(<generated>)
at org.springframework.flex.servlet.MessageBrokerHandlerAdapter.handle(MessageBrokerHandlerAdapter.java:101)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:875)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:807)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:571)
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:511)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Unknown Source)
Caused by: org.hibernate.PropertyValueException: not-null property references a null or transient value: br.com.dnasolution.cartorioseletronicos.entity.TbItemMensagem.cdMensagem
at org.hibernate.engine.Nullability.checkNullability(Nullability.java:72)
at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:290)
at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:181)
at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:107)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:187)
at org.hibernate.event.def.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:33)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:172)
at org.hibernate.event.def.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:27)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70)
at org.hibernate.impl.SessionImpl.fireSave(SessionImpl.java:535)
at org.hibernate.impl.SessionImpl.save(SessionImpl.java:523)
at org.hibernate.impl.SessionImpl.save(SessionImpl.java:519)
at org.springframework.orm.hibernate3.HibernateTemplate$12.doInHibernate(HibernateTemplate.java:697)
at org.springframework.orm.hibernate3.HibernateTemplate.doExecute(HibernateTemplate.java:419)
... 50 more
obrigado