【发布时间】:2011-11-20 11:32:39
【问题描述】:
我是 Hibernate 的新手,上周学习了 Hibernate 教程。我对 Session 类中的方法 save、update、saveOrUpdate 和 merge 有一些疑问。它们是:
-
保存方法:用于将新创建的对象插入数据存储区。 (基本上,标识符值将是 0)。就像我创建一个新客户并调用保存操作一样,它会将其保存在数据存储中并生成标识符。
这是正确的吗?如果我们在已经持久化的对象上调用保存,不确定会发生什么?
-
更新方法:它用于更新数据存储中已经存在的对象。(基本上标识符值将是一些非零值)。就像我加载一个新客户并在更新某些字段值后调用更新操作一样,它会在数据存储中更新它。
根据我的理解,它应该会失败并出现一些异常,因为根据 API 更新是针对分离对象的。它是否正确?如果是,我们应该调用什么来更新同一会话中的对象(我的意思是如果对象未分离)。还有一点是:如果我们在新创建的对象上调用 update 会发生什么?
-
saveOrUpdate 方法: 它将根据未保存值检查调用上述任一方法(它必须基于标识符零或非零值进行,对吗?)所以如果我们有持久的客户对象我们更新他的姓氏并创建一个新帐户,然后 saveOrUpdate 会处理它。
我理解正确吗?
-
Merge 方法: 它的作用类似于更新,但在这里,如果会话中已经存在具有相同标识符的持久对象,它将更新持久对象中的分离对象值并保存它。
但是如果当前没有与会话关联的持久化实例,这将从数据存储中加载持久化对象,然后更新加载的持久化对象中分离对象的值,然后更新它。
我也明白了吗?
【问题讨论】:
标签: hibernate