什么是数据库会话?

我了解对数据库事务处理概念的一般理解。我们访问事务内的数据库以确保ACID属性。

在Hibernate中,有一个称为会话的概念。会话的用途是什么?什么时候应该在两个会话中而不是在同一会话中进行数据库访问?

为了进一步说明,我已经看到了hibernate代码,

  • 从会话工厂获取会话
  • 打开会议
  • 开始交易
  • 提交交易
  • 关闭会议

我需要知道的是在这里召开会议的重要性是什么?为什么没有像交易工厂这样的东西,开始交易并提交交易呢?

回答:

会话不仅仅是一个事务,它是UnitOfWork模式的一种实现。换句话说,它保持加载的对象,知道哪些对象必须持久保存,等等:

工作单元会跟踪您在业务交易过程中可能影响数据库的所有操作。完成后,它会计算出由于工作而需要更改数据库的所有工作。

为了更好地理解Session和Transaction之间的关系,您可以看一下本文。

单个Hibernate会话可能具有与单个数据库事务相同的作用域。

这是用于每个请求会话实现模式的最常见的编程模型。单个会话和单个数据库事务实现特定请求事件(例如,Web应用程序中的Http请求)的处理。切勿使用每次操作会话反模式!(极少见的例外是每次操作会话可能适用,如果您只是学习Hibernate,则不会遇到这些例外。)

另一个编程模型是长时间对话的模型,例如,一个实现多步对话框(例如向导对话框)的应用程序,以便在几个请求/响应周期中与用户进行交互。一种实现此方法的方法是每个请求的对象分离会话模式。一旦持久性对象被认为在用户思考期间已分离,并且在修改它们后必须将它们重新附加到新的会话。

但是,建议使用“每次会话会话”模式。在这种情况下,单个会话的范围比单个数据库事务更大,并且可能跨越多个数据库事务。每个请求事件都在单个数据库事务中处理,但是会话的刷新将被延迟到会话结束和最后一个数据库事务为止,以使会话成为原子。在用户思考期间,会话保持断开状态,没有打开的数据库连接。Hibernate的自动乐观并发控制(带有版本控制)用于提供会话隔离。

以上是 什么是数据库会话? 的全部内容, 来源链接: utcz.com/qa/432669.html

回到顶部