有一种方法可以检查Hibernate方法.saveOrUpdate()是否进行了插入或更新?

edu*_*oda 5 hibernate

我怎么知道Hibernate是否在运行后进行getHibernateTemplate().saveOrUpdate(object);了插入或更新,该方法无效!

saveOrUpdate()执行以下操作:

  • 如果对象在此会话中已经存在,则不执行任何操作
  • 如果与该会话关联的另一个对象具有相同的标识符,则引发异常
  • 如果对象没有标识符属性,请保存()
  • 如果对象的标识符具有分配给新实例化的对象的值,则将其保存()
  • 如果对象由或进行版本控制,并且版本属性值与分配给新实例化的对象的值相同,则将其保存()
  • 否则update()对象

恐怕在运行此方法之前,我始终必须检查对象是否已经具有“主键/ ID”,这是唯一的方法吗?如果是,如何以通用方式获取主键/ ID?

Serializable id = session.getIdentifier(entity);Object id = entityManagerFactory.getPersistenceUnitUtil().getIdentifier(entity);??

小智 2

是的,检查与持久上下文中的实体关联的标识符意味着我们正在检查该实体是否处于持久状态。由于您已经参考了文档,我建议请查看这个问题, Hibernate saveOrUpdate 行为- 看看 Olaf 的答案,它以简短而甜蜜的方式解释了它是如何工作的。

有了 JPA 2.0,我们就有了

对象 id =EntityManagerFactory.getPersistenceUnitUtil().getIdentifier(entity); 检查方式。

但是,您的问题被标记为休眠,因此第一个问题是正确的。

可序列化 id = session.getIdentifier(entity);