java - Javers Spring Boot 集成按实例 ID 查询生成器返回空结果

标签 java spring-boot javers

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

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

这是我的 fork 示例:

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. 像往常一样运行服务./gradleworganization-struct-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

最佳答案

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

关于java - Javers Spring Boot 集成按实例 ID 查询生成器返回空结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57471605/

相关文章:

java - 如何将 BufferedImage 转换为 javaxt.io.Image?

java - 合并(合并)2 个 JSONObjects 的最佳方式是什么?

java - startActivityForResult 到一个类并让该类将数据返回到另一个类?

java - webjars -> HTTP 406

java - Spring Integration DSL,从消息 channel 轮询

javers - 我在插入数据时遇到 Javers 的性能问题

javers - 清除旧数据的能力

Java:滚轮程序 - 调试 - 无论有效信息如何,变量都不会从 JTextField 更新并抛出 NumberFormatException

spring-boot - Spring Boot应用程序不使用k8 gke服务帐户而是使用默认服务帐户

javers - 如何使用 Javers 区分相同实体类但具有不同 ID 的两个对象