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]