5

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

saveOrUpdate() 执行以下操作:

  • 如果对象已在此会话中持久存在,则不执行任何操作
  • 如果与会话关联的另一个对象具有相同的标识符,则抛出异常
  • 如果对象没有标识符属性,则保存()它
  • 如果对象的标识符具有分配给新实例化对象的值,则保存()它
  • 如果对象由 or 版本化,并且版本属性值与分配给新实例化对象的值相同,则 save() 它
  • 否则更新()对象

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

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

4

1 回答 1

2

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

使用 JPA 2.0,我们有

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

但是你的问题被标记为休眠,所以第一个是正确的。

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

于 2013-07-05T09:49:39.750 回答