2014-10-19 54 views
1

我一直在做一個簡單的程序中使用Hibernate框架如下保存在MySQL的僱員的詳細信息在數據庫中插入製作...使用Hibernate未做事務實例

public class Manifest { 

    Session session; 

    public static void main(String[] args) { 
     Employee employee = new Employee("varun"); 
     new Manifest().addEmployee(employee); 
    } 

    /* Method to CREATE an employee in the database */ 
    public void addEmployee(Employee employee){ 

      Integer employeeID=null; 
      SessionGenerator sessionGenerator = new SessionGenerator(); 
      try{ 
      session = sessionGenerator.getSessionToDb(); 
      employeeID = (Integer) session.save(employee); 
      System.out.println(employeeId); 
      }catch (HibernateException e) { 
       e.printStackTrace(); 
      }finally { 
       session.close(); 
      } 
    } 
} 

我知道的事實,我應該使用session.beginTransaction(); & tx.commit()但我的問題是,爲什麼在我的情況下沒有引發異常,它在控制檯上打印employeeId,但沒有在數據庫中進行任何輸入..背後的原因是什麼?

回答

1

1)Session.save()可能會執行一個INSERT外部事務邊界:save()方法返回一個標識符,並且如果必須執行INSERT以獲取標識符(例如「identity」生成器) INSERT立即發生(爲了獲得一個身份),無論你是在一個交易之內還是之外。

2)提交可能發生,即使沒有交易,如果你設置:

<property name="connection.autocommit">true</property> 

這就是爲什麼一個異常沒有引發

檢查這篇文章(使用Hibernate非事務性工作):https://developer.jboss.org/wiki/Non-transactionalDataAccessAndTheAuto-commitMode

相關問題