標籤:
一個典型的事務應該使用下面的形式 在建立完Session對象後即使用beginTransaction()啟動事務 從此開始直到commit()之間的代碼 都會處於同一個事務中 這兩個函數之間所有的資料庫代碼都會在commit()時一次性提交 在提交時 如果某一句代碼執行出現異常 就會復原這一次事物之間的所有執行代碼
- 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對資料庫的操作
使用Query進行HQL查詢
使用Criteria進行條件查詢
Hibernate核心類用法-使用Transaction管理事務