我将继续使用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]
所以我的问题是: 是否有可能在其最新快照中获取实体及其引用实体的最新阴影?
我知道这不是一个正确的历史状态,但是执行此操作的选项会很好,因为它几乎不需要以任何其他方式查询数据库。
答案 0 :(得分:0)
有趣的问题。
的快速回答是否有可能获得实体的最新阴影及其引用的实体也处于最新阴影处?
不是,没有这样的方法,但也许它应该在Javers中实现。
也许loadLatestShadowGraph()
?
现在,当你得到一个物体的阴影时,它是一个历史视图,为这个暗影根对象的提交日期恢复(在你的例子中,Garage是暗根)。所有引用的Shadows都会加载Shadow root的提交日期。