JPA - 如何在openjpa中复制Hibernate的更新版本化查询

时间:2016-11-29 06:41:50

标签: java hibernate jpa openjpa

我试图在Openjpa中复制"更新版本化" 的Hibernate行为:

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

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

1 个答案:

答案 0 :(得分:1)

Hibernate规范:

  

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

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

  

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