在 Hibernate 中,session.persist() 和 session.save() 之间有什么区别?
谁能告诉我与Hibernate相比有什么优势?persist()
save()
谁能告诉我与Hibernate相比有什么优势?persist()
save()
persist()
定义明确。它使瞬态实例持久化。但是,它不保证标识符值将立即分配给持久性实例,分配可能会在刷新时发生。规范没有这么说,这就是我遇到的问题。persist()
persist()
还保证在事务边界之外调用 INSERT 语句时,它不会执行该语句。这在具有扩展会话/持久性上下文的长时间运行的对话中很有用。需要类似的方法。
persist()
save()
不保证相同,它返回一个标识符,并且如果必须执行INSERT才能获得标识符(例如“身份”生成器,而不是“序列”),则无论您在交易内部还是外部,此INSERT都会立即发生。这在具有扩展会话/持久性上下文的长期运行对话中是不好的。
我已经对 save() vs. persist() 进行了很好的研究,包括在我的本地机器上运行它几次。前面的所有解释都是令人困惑和不正确的。经过彻底的研究,我在下面比较了save()和concept()方法。
Save()
Serializable
;session.save()
中分离的对象将在表中创建新行。Persist()
void
;session.persist()
对于分离的对象将抛出一个 ,因为它是不允许的。PersistentObjectException
所有这些都在 上尝试/测试。Hibernate v4.0.1