代码之家  ›  专栏  ›  技术社区  ›  CJunior

同时使用JPA/Crud Repository和@Version注释

  •  1
  • CJunior  · 技术社区  · 2 年前

    因此,在我的MySQL数据库中,我使用版本列,它们在Java类中的参数表示每个表,并用@version进行注释。

    每当我尝试更新两次某个东西时,我都会收到一个错误:org.hibernate.StaleObjectStateException:行被另一个事务更新或删除。

    我注意到发生这种情况是因为当我更新对象时,数据库表中的版本会增加,但在我这边,我仍然有旧版本,这导致了提交第二次更新时的问题(假设我的版本一直是1,而在数据库上已经是2)。在调试时,我注意到save()/saveAll()方法不会返回递增的新版本(它们应该返回吗?)。

    enter image description here

    下面是持久层的实现,我在这里保存这个activationList

    @Entity
    @Table(name = "CO_PAR_ACTIVATION_DIFFUSION_ENTITE")
    public class ActivationDiffusionEntiteDb extends AbstractDatabaseObject {
    
        private static final long serialVersionUID = -6355794857690807029L;
        @Id
        @SequenceGenerator(name = "TCO_ACTENT_GENERATOR", allocationSize = 1)
        @GeneratedValue(strategy = GenerationType.AUTO, generator = "TCO_ACTENT_GENERATOR")
        private Long id;
    
        (...)
    
        @Version
        private Long version;
    

    我正在保存的对象。

    TLDR:想知道是否有更好的方法可以在不必再次读取数据库的情况下获得更新的数据库行版本,因为saveAll()/save()存储库方法不会返回新版本。

    非常感谢。

    0 回复  |  直到 2 年前