You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Javers中能否查询引用指定Project实体的所有关联实体变更?

在Javers中查询引用特定Project的所有实体变更记录

当然可以实现!Javers提供了灵活的查询API,能够通过实体的关联属性条件筛选出关联特定Project的所有实体变更记录。针对你给出的Project、House、Street实体结构,我们可以通过以下步骤来构建查询:

核心思路

我们需要针对所有引用Project的实体(比如House、Street),查询它们的变更记录中,关联的Project id与目标id匹配的条目。Javers的QueryBuilder支持通过属性路径条件来实现这种关联筛选。

代码示例

// 初始化Javers实例(根据你的实际配置调整,比如添加持久化等)
Javers javers = JaversBuilder.javers()
        .registerEntity(Project.class)
        .registerEntity(House.class)
        .registerEntity(Street.class)
        .build();

// 指定要查询的目标Project ID
Long targetProjectId = 100L;

// 构建查询:同时查询House和Street实体,筛选关联Project ID匹配的变更
Query query = QueryBuilder.byClass(House.class, Street.class)
        // 使用属性路径"project.id"匹配目标Project ID
        .withPropertyCondition(JqlQueryBuilder.value("project.id").equal(targetProjectId))
        .build();

// 执行查询获取所有所有符合条件的变更记录
List<Change> relevantChanges = javers.findChanges(query);

// 遍历处理变更记录
for (Change change : relevantChanges) {
    // 这里可以根据需求格式化输出变更详情,比如变更类型、实体信息等
    System.out.println("变更详情: " + change.prettyPrint());
}

关键细节说明

  • 多实体类型查询:如果还有其他引用Project的实体(比如Building、Park等),只需在byClass()方法中添加对应的类即可,比如byClass(House.class, Street.class, Building.class)。
  • 属性路径调整:如果你的实体中关联Project的属性名称不是project(比如叫relatedProject),需要将条件中的属性路径改为"relatedProject.id"。
  • 扩展筛选条件:你还可以结合其他查询条件,比如添加时间范围(.withDateAfter(LocalDate.of(2024,1,1)))、指定变更类型(.withChangeType(NewObject.class))等,进一步缩小查询范围。

内容的提问来源于stack exchange,提问作者Yendor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 08:10:50