Javers SpringBoot集成QueryBuilder byInstanceId返回空结果

时间:2019-08-13 05:29:24

标签: java spring-boot javers

我正在通过此示例使用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时所做的更改和快照返回空结果,但是使用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. 通过运行数字4再次获得相同的快照,它应该显示为空结果。除非我插入新数据,否则将返回新插入的数据。

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

1 个答案:

答案 0 :(得分:0)

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