Hibernate + Spring transação não faz rollback quando da erro

Pessoal, tenho estava estudando o gerenciamento de transação do spring via annotations e vi que esta criando a transação mas coloquei um propositalmente ocorrer um erro mas a transação nao esta fazendo rollback. A aplicação faz o seguinte, eu faco dois inserts dentro um método que esta com gerenciamento de transação atraves de @transaction onde o primeiro insert ta ok mas propositalmente o segundo da erro de tamanho muito longo da string entao era pra transação dar rollback e nao commitar o
primeiro insert. Mas ele nao esta fazendo isso e o primeiro insert esta sendo comittado.

Uso o HibernateTemplate e abaixo estao os meus fontes de teste.

Abaixo é uma classe com um método main para executar testes apenas p testar esse problema onde propositalmente vai ocorrer um erro no segundo save p ver se da rollback mas isso nao acontece o primeiro save é commitado no banco. O que esta errado?

package teste;

import org.hibernate.criterion.DetachedCriteria;
import org.hibernate.criterion.Restrictions;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.dao.DataAccessException;
import org.springframework.orm.hibernate3.HibernateTemplate;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

import br2.Pessoa;
import br2.Telefone;
import br2.TipoTelefone;


public class Teste {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		
		ClassPathXmlApplicationContext ap = new ClassPathXmlApplicationContext("br2/applicationContext.xml");
		Teste t = (Teste) ap.getBean("teste");
		t.teste();
		
	}
	
	
    @Transactional(propagation = Propagation.REQUIRES_NEW)	
	public void teste()
	{
		ClassPathXmlApplicationContext ap = new ClassPathXmlApplicationContext("br2/applicationContext.xml");
		HibernateTemplate h = (HibernateTemplate) ap.getBean("hibernateTemplate");
		
		TipoTelefone tipoTelefone = new TipoTelefone();
		tipoTelefone.setTipo("tipo");
		h.save(tipoTelefone);
		
		Pessoa p = new Pessoa();
		p.setNome("(aqui vai dar erro de string muito longa)(aqui vai dar erro de string muito longa)");
		p.setIdade(25);
		
		h.save(p);//aqui vai ocorrer o erro
		
	}

}

Abaixo é meu applicationContext

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"  
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:tx="http://www.springframework.org/schema/tx"
       default-autowire="byName"
       xsi:schemaLocation="http://www.springframework.org/schema/beans  
            http://www.springframework.org/schema/beans/spring-beans-2.5.xsd  
            http://www.springframework.org/schema/context  
            http://www.springframework.org/schema/context/spring-context-2.5.xsd
            http://www.springframework.org/schema/tx
            http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">

     <bean id="sessionFactoryAnnotation" 
                  class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
    
       <property name="annotatedClasses" >
          <list>
             <value>br2.Pessoa</value>
             <value>br2.Telefone</value>
             <value>br2.TipoTelefone</value>
          </list>
       </property>
       
       <property name="dataSource" ref="ds"/>
       
       <property name="hibernateProperties">
       		<props>
       			<prop key="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</prop>
       			<prop key="hibernate.show_sql">true</prop>  
       		</props>
       </property>
    </bean>
    
    <bean id="ds" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
		<property name="driverClassName">
			<value>com.mysql.jdbc.Driver</value>
		</property>
		<property name="url">
			<value>jdbc:mysql://localhost:3306/teste</value>
		</property>
		<property name="username">
			<value>root</value>
		</property>
		<property name="password">
			<value>admin</value>
		</property>
	</bean> 
 
    <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
		<property name="sessionFactory">
           <ref local="sessionFactoryAnnotation"/>
        </property>
	</bean>

    
    <bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate">
       <property name="sessionFactory" ref="sessionFactoryAnnotation"/>
    </bean>
    
    <bean id="teste" class="teste.Teste"/>
    
    <tx:annotation-driven transaction-manager="transactionManager" />
    
</beans>

abaixo estao as minhas entidades mapeadas via annotation

package br2;

// Generated 20/03/2009 18:13:49 by Hibernate Tools 3.2.2.GA

import java.util.HashSet;
import java.util.Set;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import static javax.persistence.GenerationType.IDENTITY;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table;

/**
 * Pessoa generated by hbm2java
 */
@Entity
@Table(name = "pessoa", catalog = "teste")
public class Pessoa implements java.io.Serializable {

	private Integer idPessoa;
	private String nome;
	private int idade;
	
	public Pessoa() {
	}

	public Pessoa(String nome, int idade) {
		this.nome = nome;
		this.idade = idade;
	}


	@Id
	@GeneratedValue(strategy = IDENTITY)
	@Column(name = "id_pessoa", unique = true, nullable = false)
	public Integer getIdPessoa() {
		return this.idPessoa;
	}

	public void setIdPessoa(Integer idPessoa) {
		this.idPessoa = idPessoa;
	}

	@Column(name = "nome", nullable = false, length = 30)
	public String getNome() {
		return this.nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	@Column(name = "idade", nullable = false)
	public int getIdade() {
		return this.idade;
	}

	public void setIdade(int idade) {
		this.idade = idade;
	}


}
package br2;

// Generated 20/03/2009 18:13:49 by Hibernate Tools 3.2.2.GA

import java.util.HashSet;
import java.util.Set;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import static javax.persistence.GenerationType.IDENTITY;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table;
 
/**
 * TipoTelefone generated by hbm2java
 */
@Entity
@Table(name = "tipo_telefone", catalog = "teste")
public class TipoTelefone implements java.io.Serializable {

	private Integer idTipoTelefone;
	private String tipo;


	public TipoTelefone() {
	}

	public TipoTelefone(String tipo) {
		this.tipo = tipo;
	}

	@Id
	@GeneratedValue(strategy = IDENTITY)
	@Column(name = "id_tipo_telefone", unique = true, nullable = false)
	public Integer getIdTipoTelefone() {
		return this.idTipoTelefone;
	}

	public void setIdTipoTelefone(Integer idTipoTelefone) {
		this.idTipoTelefone = idTipoTelefone;
	}

	@Column(name = "tipo", nullable = false, length = 20)
	public String getTipo() {
		return this.tipo;
	}

	public void setTipo(String tipo) {
		this.tipo = tipo;
	}


}

Se alguem poder me ajudar agradeço!