【发布时间】:2010-10-15 14:50:17
【问题描述】:
如何配置Hibernate 以在会话执行每个操作后立即将所有保存、更新和删除应用到数据库服务器?默认情况下,Hibernate 将所有保存、更新和删除操作排入队列,并仅在 flush() 操作、提交事务或发生这些操作的会话关闭之后将它们提交到数据库服务器。
立即刷新数据库“写入”操作的一个好处是程序可以在发生它们的代码块中捕获和处理任何数据库异常(例如ConstraintViolationException)。对于延迟刷新或自动刷新,这些异常可能在导致 SQL 操作的相应 Hibernate 操作之后很长时间发生。
更新:
根据接口Session的Hibernate API文档,在会话结束之前捕获和处理数据库异常的好处可能根本没有好处:“如果会话抛出异常,则必须回滚事务并且会话被丢弃。异常发生后,Session的内部状态可能与数据库不一致。"
也许,使用 try-catch 块包围“立即”Hibernate 会话写入操作的好处是在异常发生时立即捕获并记录异常。立即刷新这些操作是否还有其他好处?
【问题讨论】: