来自hibernate文档:
persist()使瞬态实例持久化。但事实并非如此 保证将标识符值分配给持久性 实例立即,分配可能发生在刷新时。 persist()还保证它不会执行INSERT语句 如果在事务边界之外调用它。这很有用 长时间运行的会话与扩展的会话/持久性 上下文。
这一行“persist()还保证如果在事务边界之外调用它,它将不会执行INSERT语句。”似乎令人困惑。如果我们调用了persist(),那么它已经是会话的一部分了。那为什么“交易之外”的问题到了?
由于
答案 0 :(得分:0)
会话和事务生命周期仅对于每个请求的会话是相同的,尽管是最常用的会话管理模式。
但是,当跨多个Web请求重用Session时,Hibernate非常灵活,并且还支持长对话。这与使用statefull EJB的Java EE扩展持久化上下文类似。
在长时间的对话中,如果服务层客户端线程退出,则会释放数据库连接,并且会话不再自动刷新。
它是可以在可写事务中运行的最后一个请求,它将所有状态更改同步到数据库。