在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会将数据库会话与休眠同步吗?
它是否仅在提交/刷新/刷新时才进行变色/刷新而不是更新/保存?
答案 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
及
后写缓存的好处如下:
有关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会话同步