Spring HibernateDAOSupport获取方法

Spring HibernateDAOSupport获取方法,spring,hibernate,Spring,Hibernate,我正在处理一个使用Hibernate和Spring的现有项目。我看到下面的代码使用了HibernateDAOSupport类 Employee emp = getHibernateTemplate().get(Emplyee.class, 1001) 在上述行之后,我们设置了一些属性,如emp.setAge(25)

我正在处理一个使用Hibernate和Spring的现有项目。我看到下面的代码使用了HibernateDAOSupport类

Employee emp = getHibernateTemplate().get(Emplyee.class, 1001)
在上述行之后,我们设置了一些属性,如
emp.setAge(25)

如果可以保存,那么
getHibernateTemplate().get()
getHibernateTemplate()之间有什么区别.save
/
保存或更新
方法?

这是Hibernate的预期行为,因为
员工
实体加载到
持久性上下文
中,因此进入“持久性”实体生命周期状态

提交事务时,Hibernate将检查
PersistenceContext
中的任何“持久”实体,查看它们是否“脏”。脏表示实体的任何值都已更改。您对
emp.setAge(25)
的调用意味着Hibernate知道实体中的数据已经更改(它是脏的),因此当事务提交时,它应该使更改保持不变


值得阅读和理解Hibernate是如何管理实体状态的,因为一开始可能会有点混乱。文档是。

您是否在源代码中搜索了
Save
/
SaveOrUpdate
,以确保它们没有被调用?您可能是从带有@Transactional注释的服务调用DAO的。因此,当服务方法结束时,事务结束,更改的实体被刷新到数据库中,因为它们由JPA EntityManager管理。@xxbbcc:Yes。没有调用Save/SaveOrUpdate方法。@Mike ArgyRou:我在bean类中看到事务性注释。这会导致这种持久性吗?是的@Transactional负责容器启动和结束事务(以及刷新更改),我同意。那么就不需要Save/SaveOrUpdate方法了?它们的语义略有不同。保存只会使新的临时实例持久化。它不会更新现有实例。SaveOrUpdate将使新的临时实例持久化,或更新已持久化的实例。