一個典型的事務應該使用下面的形式 在建立完Session對象後即便用beginTransaction()啓動事務 今後開始直到commit()之間的代碼 都會處於同一個事務中 這兩個函數之間全部的數據庫代碼都會在commit()時一次性提交 在提交時 若是某一句代碼執行出現異常 就會回滾這一次事物之間的全部執行代碼css
- public User getUser(String username) throws HibernateException {
- Session session = null;
- Transaction tx = null;
- User user = null;
- try {
- session = HibernateSessionFactory.currentSession();
- tx = session.beginTransaction();
- Query query = session.createQuery("from User where username=?");
- query.setString(0, username.trim());
- user = (User)query.uniqueResult();
- query = null;
- tx.commit ();
- }catch(HibernateException e){
- throw e;
- }finally{
- if (tx!=null) {
- tx.rollback();
- }
- HibernateSessionFactory.closeSession();
- }
- return user;
- }
若是Session拋出異常 事務必須回滾 Session也會被廢棄 在異常發生後 Session的內部狀態可能會與數據庫失去同步數據庫
除了這些 Hibernate的核心類操做 還有session
使用Session對數據庫的操做函數
使用Query進行HQL查詢spa
使用Criteria進行條件查詢對象