Dmi*_*try 20
Session不仅仅是一个事务,它是UnitOfWork模式的一个实现.换句话说,它保留了加载的对象,知道哪些对象必须被持久化等等:
工作单元会跟踪您在业务事务中可能影响数据库的所有操作.完成后,它会计算出因工作而需要更改数据库的所有操作.
为了更好地理解Session和Transaction之间的关系,您可以查看本文.
单个Hibernate会话可能与单个数据库事务具有相同的范围.
这是用于每个请求的会话实现模式的最常见的编程模型.单个会话和单个数据库事务实现特定请求事件的处理(例如,Web应用程序中的Http请求).永远不要使用会话操作反模式!(当每个操作的会话可能是合适的时,极少数例外,如果您只是学习Hibernate,则不会遇到这些例外.)
另一种编程模型是长对话,例如实现多步对话的应用程序,例如向导对话,以在若干请求/响应循环中与用户交互.实现此目的的一种方法是每个请求的会话分离对象模式.一旦持久对象在用户思考时被认为是分离的,并且必须在修改后重新连接到新的会话.
然而,建议使用每会话会话模式.在这种情况下,单个会话的范围比单个数据库事务更大,并且可能跨越多个数据库事务.每个请求事件都在一个数据库事务中处理,但会话的刷新将延迟到会话结束和最后一个数据库事务,以使会话成为原子.在用户思考期间,会话处于断开状态,没有打开的数据库连接.Hibernate的自动乐观并发控制(带版本控制)用于提供对话隔离.
@Dmitry回答得非常好.
查看会话的另一种方法是作为数据库使用实例.创建会话时,您可以准备好上下文,以便与其中所需的支持服务(例如,事务,缓存,连接等)进行任何数据库交互.事务是会话中使用的独立服务.
此外,会话是典型OR映射工具(如hibernate)使用的第一级缓存.会话充当根据请求创建的临时上下文,以促进数据库交互.
| 归档时间: |
|
| 查看次数: |
15660 次 |
| 最近记录: |