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

时间:2018-03-06 09:40:08

标签: javers

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

@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]

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

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

1 个答案:

答案 0 :(得分:0)

有趣的问题。

的快速回答

是否有可能获得实体的最新阴影及其引用的实体也处于最新阴影处?

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

现在,当你得到一个物体的阴影时,它是一个历史视图,为这个暗影根对象的提交日期恢复(在你的例子中,Garage是暗根)。所有引用的Shadows都会加载Shadow root的提交日期。