title: why does transaction roll back on RuntimeException but not SQLException
body: <p>I have a Spring-managed service method to manage database inserts. It contains multiple insert statements.</p>
  
  <pre><code>@Transactional
  public void insertObservation(ObservationWithData ob) throws SQLException 
  {
      observationDao.insertObservation(ob.getObservation());
              // aop pointcut inserted here in unit test
      dataDao.insertData(ob.getData());
  }
  </code></pre>
  
  <p>I have two unit tests which throw an exception before calling the second insert. If the exception is a RuntimeException, the transaction is rolled back. If the exception is a SQLException, the first insert is persisted. </p>
  
  <p>I'm baffled. Can anyone tell me why the transaction does not roll back on a SQLException? Can anyone offer a suggestion how to manage this? I could catch the SQLException and throw a RuntimeException, but that just seems weird.</p>