在下面的代码中:
SessionFactory sessionFactory = new Configuration().configure("student.cfg.xml").buildSessionFactory();
Session session = sessionFactory.openSession();
//Transaction tran = session.beginTransaction();
session.save(student);
//tran.commit();
session.flush();
session.close();
无论我是否评论/取消注释交易,它们都可以正常工作,即无交易也可以成功执行保存操作。但是,当我检查文档时,他们总是在插入更新删除之前使用事务。有什么具体原因吗?我错过了什么吗?
请让我知道这件事。我很困惑:(
此致
答案 0 :(得分:1)
当您始终使用自动提交时,它可能会损害您的数据库。假设你想一次完成一堆工作。在这种情况下,您需要在完成所有工作后创建事务并提交所有工作。例如,您需要为原子工作执行大量数据库访问。在这种情况下,您需要完成事务中的所有工作并提交所有工作。
Session session = factory.openSession();
Transaction tx = session.beginTransaction();
// do some work
tx.commit();
当然有你的捕获块。
答案 1 :(得分:1)
阅读this 这篇文章来自JBOSS
有一点我相信如果你不使用事务(在某些时候你可能需要它,如果不需要原子操作)那么任何与数据库相关的操作都会命中数据库。它使系统疯狂。如果你做事务,那么hibernate会在同一个事务中执行所有操作一次命中db。在某些时候,我之前读过的地方。
答案 2 :(得分:0)
我认为hibernate中的非选择查询正在执行多个查询(或使用多个操作),这就是为什么我们需要事务来执行它们。