休眠持久方法文档中"called outside of transaction"的含义是什么



来自hibernate文档:

persist()将瞬态实例持久化。然而,事实并非如此保证将标识符值分配给持久对象实例,则赋值可能在刷新时发生。persist()还保证它不会执行INSERT语句如果在事务边界之外调用。这在以下方面很有用具有扩展会话/持久性的长时间会话上下文。

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

谢谢

会话生命周期和事务生命周期只有在每个请求一个会话时才相同,尽管这是最常用的会话管理模式。

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

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

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

相关内容

  • 没有找到相关文章

最新更新