我是Hibernate的新手,上周学习了Hibernate教程。关于Session类中的save、update、saveOrUpdate和merge方法,我有几个疑问:
save方法:用于将新创建的对象插入数据存储区。(基本上这种情况下标识符的值为0)。例如,我创建了一个新的客户并调用了save操作,那么它会将其保存到数据存储区并生成标识符。
这是正确的吗?如果我们对已经持久化的对象调用save方法,不确定会发生什么情况?
update方法:用于更新数据存储区中已经持久化的对象。(基本上这种情况下标识符的值为非零值)。例如,我加载了一个新的客户,并在更新某些字段值后调用update操作,它会在数据存储区中更新该值。
据我所知,它应该因为API规定update是用于分离的对象而失败。这是正确的吗?如果是,如果对象不是分离的,我们应该调用什么来更新它呢?另一个要点是:如果我们在新创建的对象上调用update方法会发生什么情况?
saveOrUpdate方法:根据未保存值检查(它必须基于标识符的零值或非零值进行)调用上述任一方法,因此如果我们有持久化的客户对象并且更新了其姓氏并创建了一个新帐户,则saveOrUpdate将处理此操作。
我理解得对吗?
merge方法:它的作用类似于update,但是如果具有相同标识符的持久化对象已经在会话内,则它会更新持久化对象中分离对象的值,并保存它。
但是,如果当前与会话相关联的没有持久化实例,则会从数据存储区加载持久化对象,然后更新其中分离对象的值并将其保存。
我的理解也正确吗?