如何在 Javers 中获取包含实体的实体的最新影子?

How can I get the latest shadow of an Entity containing Entities in Javers?

我将继续使用 Bartek Walacik 给出的示例,但要为 Cars 添加颜色 属性。

@Entity
class Garage {
    @Id int id
    Set<Car> cars

    String toString() {
        "Garage " +id + "\n"+ cars.collect{it.toString()}
    }
}

@Entity
class Car {
    @Id int id
    String color

    String toString() {
        "Car " +id + " " + color
    }
}

def "should print "(){
  when:
  def javers = JaversBuilder.javers().build()
  def mutatingCar = new Car(id:2, color:"blue")
  javers.commit("", new Garage(id:1, cars: [mutatingCar, new Car(id:3, color:"red")]))

  Shadow<Garage> g = javers.findShadows(
          QueryBuilder.byClass(Garage).withScopeCommitDeep().build())[0]

  then:
  true
  println (g.get())
}

这将输出:

Garage 1
[Car 2 blue, Car 3 red]

现在我重新粉刷我的车,提交它并再次打印车库,但使用 withScopeDeepPlus:

mutatingCar.color = "green"
javers.commit("", mutatingCar)
Shadow<Garage> g = javers.findShadows(
          QueryBuilder.byClass(Garage).withScopeDeepPlus().build())[0]
println (g.get())

这将给出与上面相同的输出,但我希望所有实体都是最新的,给出这个输出:

Garage 1
[Car 2 green, Car 3 red]

所以我的问题是: 是否可以在其最新快照中获取实体及其引用实体的最新影子?

我知道这不是一个正确的历史状态,但这样做会很好,因为它几乎不需要以任何其他方式查询数据库。

有趣的问题。

的快速回答

是否可以获取一个实体的最新影子及其引用实体的最新影子?

是没有,没有这样的方法,但也许应该在Javers中实现。 也许 loadLatestShadowGraph()?

现在,当您获得一个对象的影子时,它是一个历史视图,恢复到该影子根对象的提交日期(在您的示例中,Garage 是影子根)。所有引用的影子都在影子根的提交日期加载。