如何在 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 是影子根)。所有引用的影子都在影子根的提交日期加载。
我将继续使用 Bartek Walacik
@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 是影子根)。所有引用的影子都在影子根的提交日期加载。