Hibernate保存,更新和saveOrUpdate

时间:2013-02-25 20:32:59

标签: hibernate

我有一个名为Variable的Object,带有名称和值字段。 name字段是Hibernate使其成为“标识符”的主键。我想1)将变量插入数据库(如果它还没有)和2)更新数据库中的变量(如果已经存在)。我怎么做?我已经看过Hibernate文档了,我很困惑。它对瞬态,持久和分离状态进行了冗长的解释,我将指出一些问题。

  

瞬态 - 如果对象刚刚被实例化,则它是瞬态的   使用new运算符,它与Hibernate无关   会话。它在数据库中没有持久表示,没有   标识符值已分配。瞬态实例将是   如果应用程序没有保存,则由垃圾收集器销毁   再参考一下。使用Hibernate Session创建一个对象   持久化(让Hibernate处理那些SQL语句   需要为此过渡执行。)

如果我实例化一个新的变量对象,那么变量对象显然是瞬态的,因为它已经使用new运算符进行了实例化。现在如果我为它分配一个已在数据库中找到的名称(标识符/主键属性)怎么办?它还是短暂的吗?从技术上讲,它仍然没有与Hibernate会话相关联--Hibernate不知道我的变量对象存在。但是, 已分配标识符,并且该标识符已存在于数据库中。那么它是......它是否是此时的瞬态对象?

  

持久性 - 持久化实例在其中具有表示   数据库和标识符值。它可能刚刚被保存或   但是,根据定义,它在Session的范围内。   Hibernate将检测对持久性对象所做的任何更改   状态并在单位时与状态数据库同步   工作完成。开发人员不执行手动UPDATE语句,或   当对象应该是瞬态的时,删除语句。

持久性的这个定义意味着如果我用H .load(Variable.class, "name")从Hibernate会话加载一个变量对象,那么该变量现在是持久的,因为Session知道它的存在。然而,它还表示它将“在工作单元完成时将状态与数据库同步”。什么时候发生?在我对数据库进行更改后,我是否应该从数据库中调用.adave()或.update()?否则我应该如何获取数据库中的值进行更新?

基本上,我阅读了有关Hibernate - Working with Objects的文档,但是对持久性和瞬态的解释仍然不清楚,因此保存,更新和saveOrUpdate也是如此。

0 个答案:

没有答案