Help Spring + Hibernate

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

Tenta remover a propriedade rollbackFor das duas anotações

Estou com o mesmo problema, conseguiu resolver?