是否可以找到引用另一个实体的实体的更改?
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?
我的解决方案是始终更改外部实体(在您的情况下为 House
和 Street
)。这样,JaVers 尽职尽责地记录了一个新快照,即使只是 Project
更改。
为了尽量减少“总是,但假的变化”对存储的影响,我在外部实体上创建了一个 int f
字段,我在 0
和 1
之间切换。对于 0
,它甚至不是 JSON 快照数据的一部分。为了弄清楚它应该是哪一个,我阅读了最后一张快照并在那里获取了旧值。另一种方法是始终在此处创建一个随机数。这在 JSON 中使用了更多 space,但它使您免于查询数据库以检索最后一个快照。
我有一个 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?
我的解决方案是始终更改外部实体(在您的情况下为 House
和 Street
)。这样,JaVers 尽职尽责地记录了一个新快照,即使只是 Project
更改。
为了尽量减少“总是,但假的变化”对存储的影响,我在外部实体上创建了一个 int f
字段,我在 0
和 1
之间切换。对于 0
,它甚至不是 JSON 快照数据的一部分。为了弄清楚它应该是哪一个,我阅读了最后一张快照并在那里获取了旧值。另一种方法是始终在此处创建一个随机数。这在 JSON 中使用了更多 space,但它使您免于查询数据库以检索最后一个快照。