【问题标题】:How to set JPA @Version marked field to explicit value如何将 JPA @Version 标记字段设置为显式值
【发布时间】:2020-04-17 06:24:35
【问题描述】:

拥有实体类:

@Entity
class Foo {

    @Id
    Long id;

    @Version
    java.time.Instant ts;
}

我需要使用 DB 中 ts 字段的显式值来持久化它。但是,如果我明确设置 ts 的值,它会被 JPA 自动覆盖。

我已经看到了更新的解决方案,但是它对我不起作用,因为我已经在插入时需要它: Is it possible to turn off hibernate version increment for particular update?

我无法删除 @Version,因为它位于我实体的父类中。

此外,我一般无法禁用该行为。仅在特定用例中需要它。

【问题讨论】:

    标签: java hibernate jpa


    【解决方案1】:

    根据休眠documentation

    您的应用程序被禁止更改 Hibernate 设置的版本号。 要人为增加版本号,请参阅属性文档 LockModeType.OPTIMISTIC_FORCE_INCREMENTLockModeType.PESSIMISTIC_FORCE_INCREMENT 查看 Hibernate Entity Manager 参考文档.

    如果版本号是数据库生成的,比如触发器,在版本属性上使用注解@org.hibernate.annotations.Generated(GenerationTime.ALWAYS)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-11-08
      • 2019-09-25
      • 1970-01-01
      • 2017-05-02
      • 2014-08-10
      • 2017-02-18
      • 2012-02-28
      • 2012-05-08
      相关资源
      最近更新 更多