Javers Spring Boot 集成 Query Builder by Instance Id returns 空结果

Javers SpringBoot integration QueryBuilder byInstanceId returns empty result

我正在使用此示例中的 springboot 集成:

https://github.com/l7777777b/organization-structure

这是我的分叉示例:

https://github.com/javers/organization-structure

使用mysql和最新版本的Javers 5.6.3、gradle 5.4.1和springboot 2.1.6.RELEASE.

首先我不确定它是否是预期的行为,但是当使用 QueryBuilder.byInstanceId 时更改和快照 return 为空结果,但是当使用 QueryBuilder.byClass 时它显示正确。

QueryBuilder.byInstanceId 可以显示新插入数据的结果,对于现有数据(服务启动前数据库中已有的数据)似乎无法获取。

要复制它:

  1. 运行 服务一如既往./gradlew organization-structure-sql:bootRun
  2. 创建新人

     POST http://localhost:8080/view/person
     {
         "id": 1,
         "firstName": "Yang",
         "lastName": "Huajie",
         "sex": "MALE",
         "salary": 22,
         "position": "DEVELOPER"
     }
    
  3. 更新一下,随便改一下属性

  4. 使用此代码获取快照:

     QueryBuilder jqlQuery = QueryBuilder.byInstanceId("1", Person.class);
     List<CdoSnapshot> changes = javers.findSnapshots(jqlQuery.build());
     JsonConverter jsonConverter = javers.getJsonConverter();
     System.out.println(jsonConverter.toJson(changes));
    
  5. 它应该会显示一些数据,然后重新启动服务。或强制停止它和 运行 数字 1.
  6. 通过 运行ning 4 再次获取相同的快照,它应该显示空结果。除非我插入新数据,否则新插入的数据将被 returned.

但是,如果我将 QueryBuilder.byInstanceId(personId, Person.class); 更改为 QueryBuilder.byClass(Person.class);,我可以正确地从数据库中获取所有结果,但我只需要搜索特定的 ID,这就是我需要使用 byInstanceId 的原因。

它看起来像 id 是 Integer 并且您正在将 String 值传递给 byInstanceId("1"),能否请您尝试将其更改为 int 并检查 ex。 byInstanceId(1)