使用hibernate在数据库中插入而不需要创建事务实例

时间:2014-10-19 10:22:58

标签: java mysql hibernate

我一直在制作一个简单的程序,使用hibernate框架在mysql中保存员工详细信息,如下所示......

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 个答案:

答案 0 :(得分: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