2013-03-13 52 views
0

考慮在休眠以下(簡化)場景:Hibernate事務回滾需要還是足夠接近?

Session session=sessionFactory.openSession(); 
Transaction tx=session.beginTransaction(); 
try { 
    //Do something with session 
    if (...) { 
     return something; 
    } 
    tx.commit(); 
} 
finally { 
    session.close(); 
} 

它是一個安全的做法沒有明確回滾恢復,也就是說將沒有明確的回滾session.close()語句調用的代碼段導致最終的回滾?

回答

1

不知道你的真實代碼可能有多複雜,但最好不要在catch/finally中回滾。以下是我目前的代碼的外觀:

try{ ..... 

transaction = session.beginTransaction(); ..... 
// Finally commit the changes... 
     transaction.commit(); 
}catch (Exception ex) { 
     LOG.error(blah); 
     transaction.rollback(); 
     throw new STDException("An error occured ", 
       ex); 
    } finally { 
     session.close(); 
    } 
相關問題