我试图在Openjpa中复制"更新版本化" 的Hibernate行为:
em.createQuery("update versioned MyEntity m set m.otherEntity=null where m.otherEntity=:otherEntity).setParameter("otherEntity", otherEntity).executeUpdate();
我在openjpa中尝试了相同的查询,但我收到了此查询的错误(它采用了"版本化"作为别名),因此它显然是一个HQL功能。
答案 0 :(得分:1)
Hibernate规范:
与EJB3规范保持一致,默认情况下,HQL UPDATE语句不会影响受影响实体的版本或时间戳属性值。但是,您可以强制Hibernate通过使用版本化更新来重置版本或时间戳属性值。这是通过在UPDATE关键字后添加VERSIONED关键字来实现的。
因此HQL可以选择使用更新版本化来重置版本 但是在OpenJpa中:
批量更新直接映射到数据库更新操作,绕过乐观锁定检查。如果需要,可移植应用程序必须手动更新版本列的值,和/或手动验证版本列的值。