hibernate持久化方法-“;被称为“交易之外”;意思

hibernate持久化方法-“;被称为“交易之外”;意思,hibernate,Hibernate,从hibernate文档中: persist()使临时实例持久化。但事实并非如此 确保将标识符值分配给持久化 实例,则分配可能在刷新时发生。 persist()还保证它不会执行INSERT语句 如果在事务边界之外调用它。这在某些情况下很有用 具有扩展会话/持久性的长时间运行对话 上下文 这一行“persist()还保证,如果在事务边界之外调用INSERT语句,它将不会执行INSERT语句。”似乎令人困惑。如果调用persist(),则它已经是会话的一部分。那么,“交易之外”的问题为什么会出现 感

从hibernate文档中:

persist()使临时实例持久化。但事实并非如此 确保将标识符值分配给持久化 实例,则分配可能在刷新时发生。 persist()还保证它不会执行INSERT语句 如果在事务边界之外调用它。这在某些情况下很有用 具有扩展会话/持久性的长时间运行对话 上下文

这一行“persist()还保证,如果在事务边界之外调用INSERT语句,它将不会执行INSERT语句。”似乎令人困惑。如果调用persist(),则它已经是会话的一部分。那么,“交易之外”的问题为什么会出现


感谢

会话和事务生命周期仅对每个请求的会话是相同的,尽管这是最常用的会话管理模式

但是Hibernate是灵活的,当一个会话跨多个web请求重用时,它还支持长对话。这类似于带有状态完整EJB的JavaEE扩展持久性上下文

在长对话中,当客户端线程退出服务层时,db连接被释放,会话不再自动刷新


这是可以在可写事务中运行的最后一个请求,它会将所有状态更改同步到数据库。

事务之外是什么意思?它是指在执行session.getTransaction().commit()之后执行的代码吗?它是指在begin/end调用中未执行的代码。