java - 如何加载和更新实体以增加 Hibernate @Version 属性?

标签 java hibernate

我想更新我的实体的 @Version 属性,而不对实体进行任何更改。该实体具有另一个实体的子集合。我想用 @Version 属性更新基本实体,以在 Hibernate 控制下获取该实体版本的新值。我有类似的东西(属性不是带有@Version注释的属性):

MyEntity entity = (MyEntity) getSession().load(Entity.class, id);
entity.setAttribute(new String(entity.getAttribute()));
getSession().update(entity);

但这不起作用。仅当我为其属性之一设置新值时,该实体才具有新版本值。在这种情况下,如何加载和更新实体以增加 Hibernate @Version 属性而不进行任何更改?

最佳答案

事实上,您应该通过使用 LockMode.FORCE 锁定实体来获得版本增量:

Session session = getSessionFactory().openSession();
Transaction tx = session.beginTransaction();
MyEntity u = (MyEntity) session.get(MyEntity.class, id);
session.lock(u, LockMode.FORCE);
tx.commit();
session.close();

关于java - 如何加载和更新实体以增加 Hibernate @Version 属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15851229/

相关文章:

hibernate - 使用 hibernate 和 JPA 获取惰性对象

java - Spring Boot 与 H2 数据库自动创建

java - Java 中使用尽可能少的锁进行并发字节数组访问

java - 页面加载后异步 AJAX 返回

java - JPA2 : @Min constraint for float

java - Postgres 时间戳列的默认值设置未正确使用

java - Spring Hibernate Tomcat - 超时池为空

Java, boolean 值可以从 boolean 值赋值,反之亦然吗?

java - Apache Curator - Zookeeper 连接丢失异常,可能存在内存泄漏

java - Hibernate 启用 PostLoad 事件