【发布时间】:2013-11-28 10:25:08
【问题描述】:
当我试图理解 Hibernate Save 和 persist 之间时,我遇到了这个解释:
persist() 定义明确。它使瞬态实例持久化。 但是,它不保证标识符值将是 立即分配给持久实例,分配可能 发生在冲洗时间。规范没有这么说,这是问题所在 我有坚持()。
persist() 还保证它不会执行 INSERT 语句 如果在事务边界之外调用它。这在 具有扩展会话/持久性的长期对话 语境。
需要像 persist() 这样的方法。
save() 不保证相同,它返回一个标识符,如果 必须执行 INSERT 以获取标识符(例如“身份” 生成器,而不是“序列”),这个 INSERT 立即发生,不管 如果您在交易之内或之外。这不好 具有扩展会话/持久性的长期对话 上下文。
能否请您帮助我理解persist 的行:
persist() 还保证它不会执行 INSERT 语句 如果在事务边界之外调用它。这在 具有扩展会话/持久性的长期对话 上下文。
这里的事务边界是什么?什么是长期对话?扩展会话/持久性上下文是什么意思?
还有保存方法:
这个 INSERT 会立即发生,无论你是在里面还是 交易之外。这在长期运行中并不好 与扩展会话/持久性上下文的对话。
我知道如果我们在我的程序中使用 save 方法来保存对象,我们不需要像 session.beginTransaction() 和 session.getTransaction().commt() 这样的语句。如果声明在这里说同样的话,请告诉我。那么这在长时间的对话中有何用处?
我是hibernate的新手,很难理解这些差异,请你帮我理解这些差异。
【问题讨论】: