当前位置: 首页 > 知识库问答 >
问题:

Hibernate Envers版本号顺序

柴正祥
2023-03-14

我们可以看到,转速不是单调增加的。在我的实体的审计表中,我有以下内容:

通过将记录与转速号链接在一起形成时间线,我得到了:

24 --

事实上,我有一个由2台服务器组成的集群。它们都可以将数据持久化到数据库中。我怀疑这与版本号中的顺序问题有关。因为这个问题。像MyEntity anEntity=auditReader.find(MyEntity.class,id,revNum)这样的查询不起作用,因为org.hhibernate.envers.Query.impl.AbstractAuditQuery.getSingleResult(AbstractAuditQuery.java:117)。我在where子句中检查了hibernate生成的SQL

 where
    myentity.rev<=?
    and myentity.revtype<>?
    and myentity.id=?
    and (
        myentity.revend>?
        or myentity.revend is null
    )

因此,对于编号1356的rev,会检索到几条审计记录,例如1356——

我如何解决这个问题?我的意思是使rev数单调地增加一个又一个事务。

更新

我的修订实体

@Entity
@RevisionEntity(CustomRevisionListener.class)
@Table(name = "REV_TABLE")
@SequenceGenerator(name = "GENERIC_GENERATOR", sequenceName = "SQ_REVISION_ID")
public class Revision {
    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator ="GENERIC_GENERATOR")
    @Column(nullable = false, name = REV)
    @RevisionNumber
    private long rev;

}

共有1个答案

都乐逸
2023-03-14

您可能想看看如何在 SequenceIdRevisionEntity 类中定义修订号序列。我们基本上将其定义如下:

@Id
@GeneratedValue(generator = "RevisionNumberSequenceGenerator")
@GenericGenerator(
        name = "RevisionNumberSequenceGenerator",
        strategy = "org.hibernate.envers.enhanced.OrderedSequenceGenerator",
        parameters = {
                @Parameter(name = "table_name", value = "REVISION_GENERATOR"),
                @Parameter(name = "sequence_name", value = "REVISION_GENERATOR"),
                @Parameter(name = "initial_value", value = "1"),
                @Parameter(name = "increment_size", value = "1")
        }
)
@RevisionNumber
private int id;

关键是指定initial_valueincrement_size定义为1,以避免您在现有序列定义中注意到的高阶间隙。

 类似资料:
  • +++ get:/ <<< success { "code":1, "msg":"恭喜您,API访问成功!", "data":{ "version":"1.0.0", "doc":"http://www.kancloud.cn/thinkcmf/cmf5api" } } +++

  • 本文向大家介绍PHP版本号,包括了PHP版本号的使用技巧和注意事项,需要的朋友参考一下 总是向PHP添加不同的功能和选项。尽管新版本通常不会产生太多的向后兼容性问题,但是编写谨慎的生产代码通常是明智的,您知道这些代码将在运行该语言稍旧版本的服务器上运行。 要检查当前使用的PHP版本,可以使用函数phpversion()或常量PHP_VERSION。函数和常量都返回一个包含版本号的字符串。可以使用两

  • 是否可以向Java系统添加一些度量,该系统将作为受监控应用程序的字符串返回版本号? 我的目标是建立一个仪表板,其中监控Kubernetes集群中Docker容器中运行Java应用程序的每个pod,并查看每个Java应用程序的当前版本。 如果不可能,您是否知道如何从Java应用程序中获取这些信息,并使其在Grafana仪表板中可用?

  • 这是一个处理需要反复标记的问题的一个小技巧,以一个ACM形式的题目为例: 输入:第一行是一个数字N,表示N个case,之后每个case第一行是一个数字M,表示这个case有M个数字输入,接下来是M个数字,每个数字范围是0<=n<K 输出:对每个case,输出M个数字去重后的数量 当然,这题本身没什么难度,弄个hash_set就行了,不过为了说明问题,我们假定做题的人比较笨,使用bitmap: bm

  • 软件的版本号由以下4部分组成: 主要版本号.次要版本号.版本状态码[.修订号] 应根据下面的约定使用这些部分: 主要版本:主要版本号不同,意味着本版本进行了大幅的本质修改,并且可能出现不同版本不兼容的问题。 次要版本:次要版本号不同,意味着功能的显著增强,但考虑了向后兼容性。 版本状态码:版本状态码包含了对当前版本的一些描述。它具体包含了以下信息: 发布状态。 0: 计划版(planned):计