gpt4 book ai didi

java - 观察列表中删除的对象

转载 作者:行者123 更新时间:2023-12-01 08:55:18 29 4
gpt4 key购买 nike

我们目前使用 JaVers 3.0.0。假设我们有以下两个实体 A 和 B。A 跟踪列表中的一些 B。

@Entity
@TypeName("A")
public class A {

@Id
private int id;
private List<B> items;

public A() {
items = new ArrayList<>();
}

public A(int id) {
this();
this.id = id;
}

public int getId() {
return id;
}

public void setId(int id) {
this.id = id;
}

public List<B> getItems() {
return items;
}

public void setItems(List<B> items) {
this.items = items;
}

}

这是我们相当简单的 B 类。

@Entity
@TypeName("B")
public class B {

@Id
private int id;

public B() {
}

public B(int id) {
this.id = id;
}

public int getId() {
return id;
}

public void setId(int id) {
this.id = id;
}

}

让我们向 A 类型的对象提交三项更改:

  • 提交带有空列表的对象
  • 提交带有两个添加 B 的对象
  • 提交对象并删除一个 B

之后我想观察B上的变化。

Javers javers = JaversBuilder
.javers()
.build();

A a = new A(1);
javers.commit("foo@example.com", a);

a.getItems().add(new B(1));
a.getItems().add(new B(2));
javers.commit("foo@example.com", a);

a.getItems().remove(0);
javers.commit("foo@example.com", a);

List<Change> changes = javers.findChanges(
QueryBuilder.byClass(B.class)
.build());

String changelog = javers.processChangeList(changes, new SimpleTextChangeLog());
System.out.println(changelog);

输出显示零变化。我期望看到一个已删除的对象,因为 B 是一个实体并且有一个 Id。我错过了什么?

编辑感谢您迄今为止在评论中的回答。可能是我说得不够详细。对于那个很抱歉。

我想要查询的是A上的所有更改和B上的所有更改。我只提交了A,但也许这就是问题所在?我应该跟踪 A 和 B 吗?

最佳答案

javers.compare()javers.commit() 的工作方式不同。compare() 只是比较两个对象图,没有任何上下文。这就是为什么在比较图表时您可能会在更改列表中看到 ObjectRemoved

但是 commit() 用于审核更改。由于您已将这两个类映射为实体,因此它们是独立的。 B 对象不能仅仅因为 A 对象不再引用它们而被标记为已删除。

将它们标记为已删除(并更改 ObjectRemoved)的唯一方法是调用 commitShallowDelete()

关于java - 观察列表中删除的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42069487/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com