Hibernate Session与Transaction的区别

3
我对Hibernate中的Sessions和Transactions的概念有些困惑。据我所知,Hibernate使用Sessions(持久性上下文),这基本上是实体的缓存,需要在数据库中持久化、删除或进行其他操作。Sessions封装了Transactions,因此我启动一个Session,接着创建一个Transaction。当Transaction关闭后,Persistence Context中的所有内容都会被刷新到数据库中。如果我关闭Session,同样的事情也会发生。
为什么我需要两者?我能否在不创建Transaction的情况下完成相同的操作?
1个回答

3
首先,您可以在同一会话中打开多个交易。
其次,刷新并不一定与事务提交有关。当您使用标识生成策略时,如果您保存实体,则会进行刷新。当您选择某些内容时,会话也会刷新(如果刷新模式为AUTO)。您甚至可以告诉Hibernate在事务提交之前不要进行刷新(刷新模式为MANUAL)。
事务只负责ACID,这是数据库的特性。而Session则负责管理实体、生成SQL和处理事件。这是Java的东西。
PS:Session不仅仅是一个“缓存”。它还是跟踪已更改的实体的一种方法。因此,它不仅仅是一种优化技巧。

所以事务是必需的,用于确保执行封装操作的全部或部分,否则将全部回滚,对吗?会话会跟踪从数据库中获取或需要更改的所有实体,直到它们被刷新吗? - dev8872
1
是的,就是这样 - Stanislav Bashkyrtsev
那是正确的,只是交易并不是强制性的。但是,如果有疑问,通常最好在事务中执行某些操作。 - Davide D'Alto

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接