The 'nested transaction' is not working at the Hibernate 3.1? At least not as it was at Hibernate 3.0. 
Below there is a test that works perfectly at Hibernate 3.0, but not at Hibernate 3.1.
Another test a bit more elaborated: 
Code:
    Session session = BaseRootDAO.getSession(true);
         Transaction t = session.beginTransaction();
         
         TesteDao dao = new TesteDao();
         try{
         
            Cliente cli = new Cliente();
            //set valores clientes
            
            dao.saveOrUpdate(session, cli);
            
            Dependente dep = new Dependente();
            //set valores dep
            
            dao.saveOrUpdate(session, dep);
         
         
            t.commit();//All changes need to be sent to the db in this line.
                  //As inside the DAO the transation was already openned at the session
                  //that it receives as parameter, then the commit inside the DAO
                  //must not to send the datas to the db that is a transation 
                  //transação nestled
         }catch(Exception e){
              t.rollback();
              e.printStackTrace();
         }
 Méthod SaveOrUpdate of the DAO. 
Code:
    public void saveOrUpdate(Session s, Object obj) throws HibernateException {
       Transaction t = null;
       try{
          t = s.beginTransaction();//Como a sessão recebida por parametro já tinha 
                    //uma transação aberta, está transação que esta abrindo
                    //agora deveria se tornar uma transação aninhada a primeira
          
          s.saveOrUpdate(obj);
 
          t.commit();//Esse commit não deve levar as informações para
                //O banco de dados pois ela é uma transação aninhada.
                //Ele só comita realmente se a Session recebida como parametro
                //não tivesse nenhuma transação aberta. Com o hibernate 3.1 ele 
                //está comitando essas informações no Banco.
       }catch (HibernateException e) {
          if (null != t) t.rollback();
               throw e;
       }
    }
 
I made this test with the Hibernate 3.0 and it works. The informations are only commiteds really at the db an th end of the first method, after this I just eu só changed Jar to the 3.1 and the infomations are comitteds inside the SaveOrUpdate of the DAO, make the teste. 
Thanks for the help. [/code]