title: Transaction is not being rollbacked in spring
body: <p>While issuing two inserts, if second one is failed the transaction should be rollback but this is not happening in my case, following are the details of configuration!</p>
  
  <pre><code>&lt;bean id="sessionFactory"
      class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"&gt;
      &lt;property name="dataSource" ref="dataSource" /&gt;
      &lt;property name="annotatedClasses"&gt;
          &lt;list&gt;
              &lt;value&gt;com.xyz.model.Merchant&lt;/value&gt;
              ....
          &lt;/list&gt;
      &lt;/property&gt;
      &lt;property name="hibernateProperties"&gt;
          &lt;props&gt;
              &lt;prop key="hibernate.dialect"&gt;${hibernate.dialect}&lt;/prop&gt;
              &lt;prop key="hibernate.show_sql"&gt;${hibernate.show_sql}&lt;/prop&gt;
              &lt;prop key="hibernate.format_sql"&gt;${hibernate.format_sql}&lt;/prop&gt;
  
          &lt;/props&gt;
      &lt;/property&gt;
  &lt;/bean&gt;
  &lt;bean id="transactionManager"
      class="org.springframework.orm.hibernate4.HibernateTransactionManager"&gt;
      &lt;property name="sessionFactory" ref="sessionFactory" /&gt;
  &lt;/bean&gt;
  &lt;tx:advice id="txAdvice"&gt;
      &lt;tx:attributes&gt;
          &lt;tx:method name="get*" read-only="true"/&gt;
          &lt;tx:method name="save*" propagation="REQUIRED"/&gt;
          &lt;tx:method name="modify*" propagation="REQUIRED"/&gt;
      &lt;/tx:attributes&gt;
  &lt;/tx:advice&gt;
  
  &lt;aop:config&gt;
      &lt;aop:pointcut id="allServices"
                    expression="execution(* 
      com.xyz.services.DemoApiServiceImpl.saveEmployee(..))"/&gt;
      &lt;aop:advisor advice-ref="txAdvice" pointcut-ref="allServices"/&gt;
  &lt;/aop:config&gt;
  &lt;aop:aspectj-autoproxy/&gt;
  </code></pre>
  
  <p>and these are the code details;</p>
  
  <pre><code>@Service
  @Transactional
  public class DemoApiServiceImpl implements DemoApiService {
  
  @Override
  //@Transactional( propagation = Propagation.REQUIRED, rollbackFor = Exception.class )
  public boolean saveEmployee(Employee employee) throws Exception {
  
      Boolean flag = Boolean.FALSE;
  
      flag = demoApiDao.saveOrUpdateEmployee(employee);
      if(flag)
           //generating exception so that above insert should rollback!
          throw new Exception("ok");
      if(!CollectionUtils.isEmpty(employee.getUsers())) {
          Users user = (Users) employee.getUsers().toArray()[0];
  
          //sendEmail(user,EmailType.USER_SIGN_UP.name(),Constants.MAIL_SUBJECT_ACTIVATION_LINK);
  
          UsersDto usersDto = new UsersDto();
          usersDto.setActivationCode(user.getActivationCode());
  
          String emailText = Utils.createEmailText(usersDto, EmailType.USER_SIGN_UP.name());
  
          Utils.sendEmail(user.getUsername(), Constants.FROM_EMAIL, Constants.MAIL_SUBJECT_ACTIVATION_LINK, emailText);
      }
  
      return flag;
  }
  </code></pre>
  
  <p>}</p>
  
  <p>unfortunately the transaction is not being rollbacked, I have generated exception manually to reverse the transaction.
  Any help in this regards?
  TA.</p>