繁体   English   中英

休眠会话与事务

[英]Hibernate Session vs Transaction

我对 Hibernate 中的会话和事务的概念有点困惑。 据我了解,Hibernate 使用会话(持久性上下文),它基本上是需要在数据库中持久化、删除或其他任何实体的缓存。 会话封装了事务,所以我启动一个会话,然后创建一个事务。 关闭事务后,持久性上下文中的所有内容都会刷新到数据库。如果我关闭会话,也会发生同样的事情。

为什么我两者都需要? 我可以在不创建交易的情况下做同样的事情吗?

首先,您可以在同一个会话中打开多个事务。

现在,刷新不一定与事务提交有关。 当您save()一个实体时 - 如果您使用身份生成策略,它将被刷新。 当您select某些内容时 - 会话也将刷新(如果刷新模式为自动)。 您甚至可以告诉 Hibernate 在事务提交之前不要刷新(刷新模式 MANUAL)。

事务只对 ACID 负责,它是一个 DB 特性。 而Session负责管理实体,生成SQL,处理事件。 这是Java的事情。

PS:会话不仅仅是一个“缓存”。 这也是一种跟踪更改了哪些实体的方法。 所以这不仅仅是一个优化技巧。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM