我正在开发一个使用Hibernate和Spring的现有项目。我看到以下代码 它使用HibernateDAOSupport类,
Employee emp = getHibernateTemplate().get(Emplyee.class, 1001)
在上面的行之后我们设置了一些属性,如emp.setAge(25);
,最后我们不调用任何Save或SaveOrUpdate方法。但它将数据保存到DB。怎么可能?
如果它可以保存那么getHibernateTemplate()。get()和getHibernateTemplate()。save / SaveOrUpdate方法有什么区别?请帮助我理解。
答案 0 :(得分:1)
这是Hibernate的预期行为,这是因为Employee
实体已加载到PersistenceContext
中,因此会进入“{00}”持久性'实体生命周期状态。
当您提交交易时,Hibernate将检查任何“持久性”' PersistenceContext
中的实体,看看它们是否是“脏”#34;。脏意味着实体的任何值都发生了变化。你对emp.setAge(25)
的调用意味着Hibernate理解实体中的数据已经改变(它是脏的),因此它应该在事务提交时使更改持久化。
值得阅读和理解Hibernate如何管理实体状态,因为它可能有点令人困惑。文档为here。