Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Spring + Hibernate how to prevent rollback

I have a code block with this method:

@Transactional(noRollbackFor=Exception.class)
public synchronized Object saveData(){
    //...
    dao.insert(entity);
    //...
}

My dao class is marked ad Transactional

@Transactional
public class Dao {
   //...
   public <T> void insert(T obj) throws Exception {
    getSession().saveOrUpdate(obj);
   }
}

I need to prevent any rollback inside this block. However I got this:

2014-02-25 20:47:44 [WARN]SqlExceptionHelper:143    SQL Error: 1205, SQLState: 41000
2014-02-25 20:47:44 [ERROR]SqlExceptionHelper:144   Lock wait timeout exceeded; try restarting transaction
2014-02-25 20:47:44 [ERROR]BigliettiService:?   Transazione in errore
org.hibernate.exception.GenericJDBCException: Lock wait timeout exceeded; try restarting transaction
...
2014-02-25 20:47:44 [ERROR]JsonHandlerExceptionResolver:?   Transaction rolled back because it has been marked as rollback-only

Why at the end I found a Transaction rolled back?

like image 392
Tobia Avatar asked Oct 30 '25 07:10

Tobia


1 Answers

I had a similar issue just last week. In my case it was another @Transactional annotation from a different method that caused the transaction to be marked as rollback-only.

Did you check for that yet?

Edit: To clarify it a bit more, you didn't post your code from inside your saveData() method. What caused this error for me was calling another method with @Transactional (lacking the noRollback attribute) from inside my method, in your case saveData().

like image 115
daZza Avatar answered Oct 31 '25 21:10

daZza



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!