【问题标题】:JPA - how to replicate update versioned query of Hibernate in openjpaJPA - 如何在 openjpa 中复制 Hibernate 的更新版本查询
【发布时间】:2016-11-29 06:41:49
【问题描述】:

我正在尝试在 Openjpa 中复制 Hibernate 的 “更新版本” 的行为:

em.createQuery("update versioned MyEntity m set m.otherEntity=null where m.otherEntity=:otherEntity).setParameter("otherEntity", otherEntity).executeUpdate();

我在 openjpa 中尝试了相同的查询,但我收到了此查询的错误(它将“版本化”作为别名),因此它显然是 HQL 功能。

【问题讨论】:

  • 很明显,这是无效的 JPQL,所以您期望什么? UPDATE entity_name [[AS] identification_variable] SET update_item {, update_item}* WHERE ...
  • 我期待一个答案,并没有提及我自己已经弄清楚并写在问题正文中的内容。

标签: java hibernate jpa openjpa


【解决方案1】:

休眠规范:

按照 EJB3 规范,默认情况下,HQL UPDATE 语句不会影响受影响实体的版本或时间戳属性值。但是,您可以强制 Hibernate 通过使用版本更新来重置版本或时间戳属性值。这是通过在 UPDATE 关键字之后添加 VERSIONED 关键字来实现的。

因此 HQL 可以选择使用 update versioned 来重置版本 但是在 OpenJpa 中:

批量更新直接映射到数据库更新操作,绕过乐观锁定检查。如果需要,便携式应用程序必须手动更新版本列的值,和/或手动验证版本列的值。

【讨论】:

    猜你喜欢
    • 2017-10-07
    • 1970-01-01
    • 2010-11-11
    • 2014-03-12
    • 2014-06-05
    • 2020-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多