Hibernate Session保存操作是否与底层数据库事务同步?

时间:2017-04-19 03:24:11

标签: java hibernate orm transactions hibernate-session

HIbernate commit() and flush()

看到了这个例子
Session session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();


for ( int i=0; i<100000; i++ ) {
    Customer customer = new Customer(.....);
    session.save(customer);
    if ( i % 20 == 0 ) { //20, same as the JDBC batch size
        //flush a batch of inserts and release memory:
        session.flush();
        session.clear();
    }
}

tx.commit();
session.close();

我的理解是,当我们执行session.save(customer)session.update(....)时,hibernate会将数据库会话与休眠同步吗? 它是否仅在提交/刷新/刷新时才进行变色/刷新而不是更新/保存?

2 个答案:

答案 0 :(得分:1)

Hibernate <input type="text" id="name"> <input type="submit" id="submit" disabled="true"> 和JPA Session(也称为持久化上下文)充当write-behind cache,因此entity state transitions会在刷新期间暂存并传播到数据库。

默认情况下,EntityManager调用会在执行INSERT,UPDATE和DELETE语句时触发commit

后写缓存的好处如下:

  • 更轻松地应用自动JDBC batch updates
  • 如果没有先前的SELECT语句,连接获取可以延迟到刷新,因此减少了数据库连接的租用时间。

有关Hibernate如何工作的更多详细信息,请查看this tutorial which features over 100 articles有关JPA,Hibernate和最常见的RDBMS的信息。

答案 1 :(得分:0)

Hibernate Session的生命周期受逻辑事务的开始和结束的限制。 Session为映射的实体类的实例提供创建,读取和删除操作。 保存/更新/删除是事务操作。因此,要执行这些操作,需要使用

开始事务
session.beginTransaction();

然后我们才能执行save / update / delete。 Hibernate提供了高质量的事务回滚机制。只有在通过

提交事务时,Hibernate才会对数据库进行更改
session.getTransaction().commit();

执行提交执行保存/更新/删除将使用事务实例,并且一旦调用了commit方法,hibernate将与数据库交互以应用更改。

如果保存/更新/删除失败,将执行回滚过程,保持数据库不变。

有关hibernate事务研究https://www.javatpoint.com/hibernate-transaction-management-example

的更多信息

因此,hibernate通过commit / flush / refresh

将数据库会话与hibernate会话同步