HIbernate中的交易

时间:2012-11-03 15:49:39

标签: java hibernate

在下面的代码中:

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();

无论我是否评论/取消注释交易,它们都可以正常工作,即无交易也可以成功执行保存操作。但是,当我检查文档时,他们总是在插入更新删除之前使用事务。有什么具体原因吗?我错过了什么吗?

请让我知道这件事。我很困惑:(

此致

3 个答案:

答案 0 :(得分:1)

当您始终使用自动提交时,它可能会损害您的数据库。假设你想一次完成一堆工作。在这种情况下,您需要在完成所有工作后创建事务并提交所有工作。例如,您需要为原子工作执行大量数据库访问。在这种情况下,您需要完成事务中的所有工作并提交所有工作。

Session session = factory.openSession();
Transaction tx = session.beginTransaction();

// do some work
tx.commit();

当然有你的捕获块。

答案 1 :(得分:1)

阅读this 这篇文章来自JBOSS

有一点我相信如果你不使用事务(在某些时候你可能需要它,如果不需要原子操作)那么任何与数据库相关的操作都会命中数据库。它使系统疯狂。如果你做事务,那么hibernate会在同一个事务中执行所有操作一次命中db。在某些时候,我之前读过的地方。

答案 2 :(得分:0)

我认为hibernate中的非选择查询正在执行多个查询(或使用多个操作),这就是为什么我们需要事务来执行它们。