是否可以找到引用另一个实体的实体的更改?

Is it possible to find changes for entities that reference another entity?

我有一个 Project 实体,它被许多其他类型的实体引用,例如 House 和 Street。在 Javers 中是否可以构建一个查询来查找属于某个项目的所有实体的更改,即引用该项目实体?

class Project {
    @Id Long id;
}

class House {
    @Id Long id;
    Project project;
    String name;
}

class Street {
    @Id Long id;
    Project project;
    String name;
}

不,Javers 不是关系数据库,实体之间没有连接。您所能做的就是更改映射,并将 House 和 Street 映射为值对象。如果是这样,它们将成为项目实体的一部分,并且可以使用项目 ID 查询它们。

可以使用 commit-property-filter 约束,每次提交属于项目的实体的更改时,在提交中提供项目 ID 和相应的名称 属性(例如:projectId , 1).

如果您将 Javers 与 SpringBoot 一起使用并通过 JaversSpringDataJpaAuditableRepositoryAspect 跟踪更改,那么这里是给您的提示 Is there possibility to provide object dependent map for CommitPropertiesProvider?

我的解决方案是始终更改外部实体(在您的情况下为 HouseStreet)。这样,JaVers 尽职尽责地记录了一个新快照,即使只是 Project 更改。

为了尽量减少“总是,但假的变化”对存储的影响,我在外部实体上创建了一个 int f 字段,我在 01 之间切换。对于 0,它甚至不是 JSON 快照数据的一部分。为了弄清楚它应该是哪一个,我阅读了最后一张快照并在那里获取了旧值。另一种方法是始终在此处创建一个随机数。这在 JSON 中使用了更多 space,但它使您免于查询数据库以检索最后一个快照。