Hibernate document表示persist()
与save()
相比,与Session/Persistence context
Persistence context
坚持()
这对于使用扩展的长时间对话非常有用 会话/持久化上下文。
保存()
这与长期对话有争议 会话/持久化上下文。
1)当它说long-running conversations
时意味着什么?
2)你能提供一个关于Persistence context
的例子吗?这适用于Web应用程序吗?
谢谢!
更新 This post让我清楚地了解了我的第一个问题 - {{1}}:
在运行时,只要打开和关闭会话,就会打开这些会话 和封闭边界Hibernate在Persistence中维护对象 语境。可以把它想象成休眠的第一级运行时缓存 控制。 Hibernate执行自动脏检查和事务处理 在Persistent Context中管理的实体的后写。过冬 保证此缓存中的Java对象标识范围。只有一个 表示特定数据库行的对象实例存在于 高速缓存中。
答案 0 :(得分:4)
对话是最终用户与UI的交互,以执行业务任务。此互动通常会跨越许多UI actions
。
Hibernate管理与Hibernate persistence context
关联的session
中的实体。有两种模式用于将Hibernate后端与UI前端集成:
每次会话的会话:在用户开始对话时创建一个休眠会话,并在用户中止或完成对话之前保持活动状态。当后者发生时,事务开始,会话被刷新并关闭,从而将SQL发送到数据库并且事务被提交/回滚。
每个请求的 会话(UI操作):当用户执行UI操作时,会创建一个hibernate会话。对于事务开始的每个UI操作,运行涉及此操作的代码,可以刷新和关闭会话,并提交/回滚事务。如果适用,开发人员负责re-attaching detached entities
之前在新会话中管理的人员。
第一种模式可能看起来更具吸引力,但实际上,尤其是当涉及Web应用程序时,第二种模式更受青睐,因为除非UI非常简单,否则实现起来要容易得多。您可能希望了解如何使用servlet过滤器实现open session in view
模式(每个请求模式的会话的另一个名称),或者查看您选择的Web应用程序框架的文档,了解它是如何支持的。
另一件需要注意的事情是如何执行会话隔离(与数据库上的事务隔离类似的概念)。这涉及两个同时使用相同数据的用户可能会覆盖彼此更改的可能性。看一下带时间戳或版本的乐观锁定。