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

有一种方法可以检查Hibernate方法.saveOrUpdate()是否进行了插入或更新?,hibernate,Hibernate,我如何知道Hibernate在运行getHibernateTemplate()之后是否进行了插入或更新该方法无效 saveOrUpdate()执行以下操作: 如果该对象在此会话中已持久化,则不执行任何操作 如果与会话关联的另一个对象具有相同的标识符,则引发异常 如果对象没有标识符属性,则将其保存( 如果对象的标识符具有分配给新实例化对象的值,则save()将其保存 如果对象由or进行版本控制,并且版本属性值与分配给新实例化对象的值相同,则save()将其保存 否则,更新()对象 恐怕在运行此

我如何知道Hibernate在运行
getHibernateTemplate()之后是否进行了插入或更新该方法无效

saveOrUpdate()执行以下操作:

  • 如果该对象在此会话中已持久化,则不执行任何操作
  • 如果与会话关联的另一个对象具有相同的标识符,则引发异常
  • 如果对象没有标识符属性,则将其保存(
  • 如果对象的标识符具有分配给新实例化对象的值,则save()将其保存
  • 如果对象由or进行版本控制,并且版本属性值与分配给新实例化对象的值相同,则save()将其保存
  • 否则,更新()对象
恐怕在运行此方法之前,我必须始终检查对象是否已具有“主键/id”这是唯一的方法吗?如果是,如何以通用方式获取主键/id


Serializable id=session.getIdentifier(实体)
对象id=entityManagerFactory.getPersistenceUnitUtil().getIdentifier(实体)??

是,在持久性上下文中检查与实体关联的标识符意味着我们正在检查实体是否处于持久性状态。 既然你已经参考了文件,我建议你看看这个问题, -看看奥拉夫的答案,它用简短而甜蜜的方式解释了它是如何工作的

有了JPA2.0,我们就有了

对象id=entityManagerFactory.getPersistenceUnitUtil().getIdentifier(实体);检查的方式

但是,您的问题标记为hibernate,因此第一个问题是正确的

可序列化id=session.getIdentifier(实体)


谢谢你的回答,但我在结束时检查了“id”字段,在我的例子中,它存在于所有类中,实际上是主键:
Field id=entity.getClass().getDeclaredField(id);id.setAccessible(true)