我了解对数据库事务概念的一般理解。我们访问事务内的数据库以确保ACID属性。
在Hibernate中,有一个称为会话的概念。会话的用途是什么?什么时候应该在两个会话中而不是在同一会话中进行数据库访问?
为了解释更多,我已经看到了休眠代码
我需要知道的是在这里召开会议的重要性是什么?为什么不拥有交易工厂之类的东西,开始交易并提交交易?
会话不只是事务,它是UnitOfWork模式的实现。换句话说,它保持加载的对象,知道必须保留哪些对象,等等:
一个工作单元会跟踪您在业务交易过程中可能影响数据库的所有操作。完成后,它会计算出由于您的工作而需要更改数据库的所有工作。
为了更好地理解会话和事务之间的关系,您可以看一下this article。
单个休眠会话可能具有与单个数据库事务相同的作用域。
这是用于每个请求会话实现模式的最常见的编程模型。单个会话和单个数据库事务实现特定请求事件(例如,Web应用程序中的Http请求)的处理。切勿使用每次操作会话反模式! (在极少数情况下,每次操作会话可能适当,如果您只是在学习Hibernate,则不会遇到这些例外。)
另一种编程模型是长会话模型,例如一个实现多步骤对话框(例如向导对话框)的应用程序,以便在几个请求/响应周期中与用户进行交互。一种实现此方法的方法是每个请求的对象分离会话模式。一旦持久性对象在用户思考期间被认为是分离的,并且在修改它们之后必须将其重新附加到新的Session。
但是,建议使用每次会话会话模式。在这种情况下,单个会话的范围比单个数据库事务更大,并且可能跨越多个数据库事务。每个请求事件都在单个数据库事务中处理,但是会话的刷新将被延迟到会话结束和最后一个数据库事务为止,以使会话成为原子。在用户思考期间,会话保持断开状态,没有打开的数据库连接。 Hibernate的自动乐观并发控制(带有版本控制)用于提供会话隔离。
@@ Dmitry的回答很好。
查看会话的另一种方式是作为数据库使用实例。创建会话时,您已经准备好上下文,可以与其中所需的支持服务(例如事务,缓存,连接等)进行任何数据库交互。事务是会话中使用的独立服务。
此外,会话是典型的OR映射工具(例如休眠)使用的第一级缓存。会话充当根据请求创建的临时上下文,以促进数据库交互。
会话是应用程序和存储其持久对象的关系数据库之间的连接。