【问题标题】:There is a way to check if Hibernate method .saveOrUpdate() did an insert or update?有一种方法可以检查 Hibernate 方法 .saveOrUpdate() 是否进行了插入或更新?
【发布时间】:2013-06-16 07:38:58
【问题描述】:

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

saveOrUpdate() 执行以下操作:

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

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

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

【问题讨论】:

    标签: hibernate


    【解决方案1】:

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

    在 JPA 2.0 中,我们拥有

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

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

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

    【讨论】:

    • 感谢您的回答,但我通过检查“id”属性结束了它,在我的情况下,它存在于所有类中,实际上是主键:Field id = entity.getClass().getDeclaredField(id); id.setAccessible(true);
    猜你喜欢
    • 1970-01-01
    • 2012-12-06
    • 2013-02-12
    • 2012-07-29
    • 2019-02-01
    • 2014-11-05
    • 2013-09-28
    • 2016-02-29
    • 1970-01-01
    相关资源
    最近更新 更多