Vấn đề hóa ra là kết nối tự động cam kết TRƯỚC KHI giao dịch có thể được khôi phục. Tôi đã phải thay đổi bean dataSource của mình để bao gồm thuộc tính defaultAutoCommit:
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/test"/>
<property name="username" value="root"/>
<property name="password" value="Ecosim07"/>
<property name="defaultAutoCommit" value="false" />
</bean>