Hibernate何时以及如何刷新其会话?

Hibernate何时以及如何刷新其会话?,hibernate,grails,Hibernate,Grails,我不明白hibernatesession.flush()是如何工作的。在grails中,如果自动调用,什么时候调用它?它如何决定何时是刷新的最佳时间?如果用户执行了一些需要在会话结束时运行数千个查询的操作,该怎么办?乘以数千个用户 您可以分享任何解释grails中hibernate会话的信息吗?谢谢Grails遵循处理Hibernate会话和自动刷新的“在视图中打开会话”模式 在您的示例中,如果您没有在会话上显式调用.flush(),或者在修改数据时使用flush:true,那么当启动会话的线程

我不明白hibernate
session.flush()
是如何工作的。在grails中,如果自动调用,什么时候调用它?它如何决定何时是刷新的最佳时间?如果用户执行了一些需要在会话结束时运行数千个查询的操作,该怎么办?乘以数千个用户

您可以分享任何解释grails中hibernate会话的信息吗?谢谢

Grails遵循处理Hibernate会话和自动刷新的“在视图中打开会话”模式

在您的示例中,如果您没有在会话上显式调用
.flush()
,或者在修改数据时使用
flush:true
,那么当启动会话的线程结束时(通常在基于web的Grails应用程序中的HTTP请求结束时),它实际上会刷新用户会话的所有查询

根据应用程序的不同,定期刷新会话可能是有意义的。同样,这在很大程度上取决于您的应用程序以及单个用户请求所影响的数据量。过于频繁的冲洗也会降低性能

如果您关心的是性能,那么只有一种真正的方法可以确定最佳方法是什么。使用各种方法评测您的应用程序,并查看哪种方法适合您的应用程序

有关此主题的其他信息,请参阅:

Hibernate在直接JDBC调用甚至其他调用上的一个有用特性 框架是指当您调用save或delete时,它不会 必须在该点执行任何SQL操作。冬眠 对SQL语句进行批处理,并尽可能晚地执行它们,通常 刷新和关闭会话时,在请求结束时。这 通常由Grails自动完成,Grails管理您的 休眠会话

Hibernate只在可能的情况下缓存数据库更新 当它知道需要刷新或 刷新是通过编程方式触发的。一种常见的情况是冬眠 将刷新缓存的更新是在执行查询时,因为缓存 信息可能包含在查询结果中。但只要 您正在执行无冲突的保存、更新和删除,它们将 批处理,直到刷新会话。这可能是一个重要的问题 执行大量数据库写入的应用程序的性能提升

请注意,刷新与提交事务不同。如果 您的操作是在事务上下文中执行的,例如刷新 将执行SQL更新,但数据库将在其 事务队列,仅在事务 承诺