Rollback spring

Pessoal
eu fiz o seguinte teste

enviei um objeto com uma coleção dentro dele para ser salvo no banco, até ai tudo bem,
o hibernate entro em ação, e salvo o objeto primeiro, e depois foi salvar a coleção dentro dele,
ocorreu um erro no banco quando foi ser salvo a coleção, o Spring não deveria fazer o rollback no objeto ? Por que ele não fez, ele inseriu no banco o objeto.

esse é uma parte do arquivo de configuração do spring

[code]

<?xml version="1.0" encoding="UTF-8"?>
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
    <property name="dataSource">
    	<ref bean="dataSourceExemplo"/>
    </property>        

	<property name="annotatedClasses">
      <list>
      	<value>br.gov.in.assinatura.pojo.Pessoa</value>
      	<value>br.gov.in.assinatura.pojo.CachorroPessoa</value>
      	<value>br.gov.in.assinatura.pojo.RacaoCachorro</value>
      </list>
    </property>
	
    <property name="hibernateProperties">
        <props>
            <prop key="hibernate.dialect">org.hibernate.dialect.OracleDialect</prop> 
            <prop key="hibernate.connection.driver_class">oracle.jdbc.OracleDriver</prop>
            <prop key="hibernate.show_sql">true</prop>
            <prop key="hibernate.format_sql">true</prop>
            <prop key="hibernate.jdbc.batch_size">0</prop>
            <prop key="connection.autocommit">true</prop>            
        </props>
    </property>
</bean>


<bean id="txProxyTemplate" abstract="true" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
    <property name="transactionManager" ref="transactionManager"/>
    <property name="transactionAttributes">
        <props>
        	<prop key="add*">PROPAGATION_REQUIRED </prop>
    		<prop key="delete*">PROPAGATION_REQUIRED </prop>
   	 		<prop key="update*">PROPAGATION_REQUIRED </prop>
    		<prop key="save*">PROPAGATION_REQUIRED </prop>
   			<prop key="get*">ROPAGATION_SUPPORTS,readOnly</prop> 
        </props>
    </property>
</bean>

<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
    <property name="sessionFactory" ref="sessionFactory"/>
</bean>  

[/code]

Pelo que eu andei lendo, ele faz rollback a parti da exeção que é lançada, aonde eu configuro o rollback aqui?

vlw

Qual a exceção lançada?

O Spring só da rollback para RuntimeExceptions, não para Exceptions checadas. E também não é boa prática colocar “throws Exceptions” em toda assinatura de método, pois esconde possíveis problemas.

eu simulei inserir uma coleção que está com o nome null,
e o banco nao aceita null

ai ele lança uma SQLException

[quote=Deluxe]eu simulei inserir uma coleção que está com o nome null,
e o banco nao aceita null

ai ele lança uma SQLException[/quote]

Então, SQLException é exceção checada, o Spring não vai dar rollback mesmo. O que você deve fazer é tratar essa exceção no método que a lançou e relançar uma nova exceção de runtime mais genérica. Aí sim, vai funcionar.

quando eu starto a aplicação
aparece

Deleted entity synthetic identifier rollback: disabled

tem alguma coisa haver?

[code]

    <!-- Configuração das transações -->  
<tx:advice id="transactionAdvice">  
     <!-- Configurações de transação -->  
     <tx:attributes>  
         <!-- Todos os métodos que começam com "select" são read-only -->  
         <tx:method name="get*" propagation="SUPPORTS" read-only="true" rollback-for="java.lang.Exception"/>  
         <!-- Os outros métodos requerem transação -->  
         <tx:method name="save" propagation="REQUIRED" rollback-for="java.lang.Exception"/>  
     </tx:attributes>  
 </tx:advice>   
[/code]

atualiza o spring e estou usando assim agora
porem o rollback nao faz

ele ainda continua inserindo o objeto pai
e quando vai inserir sua coleção, ele da o erro que eu programei,
mas nao faz rollback no objeto pai