我一直在制作一个简单的程序,使用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但没有在数据库中进行任何输入..这背后的原因是什么?
答案 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