0

我是 Stackoverflow 的新手,所以我会尽量适应使用情况。我想知道是否有办法获取给定实体的更改/快照的完整列表。现在它适用于奇异属性的版本,以及对集合属性的添加和删除。但我无法找到集合属性中的子实体何时更新。

给定两个实体和一个 LinkEntity:

@Entity
class Person {
  @Id
  Long id;

  @OneToMany(mappedBy = "person", cascade = CascadeType.ALL)
  Set<LinkAddress> addresses;
}

@Entity
class Address {
  @Id
  Long id;

  @OneToMany(mappedBy = "address")
  Set<Address> persons;
}

@Entity
class LinkPersonAddress {
  @Id
  Long id;

  @ManyToOne
  @ShallowReference
  Person person;

  @ManyToOne
  @ShallowReference
  Address address;

  String linkType;
}

我的用例如下。我通过 ID #1 获得了一个特定的人,然后改变了特定地址的类型(即 HOME --> WORK)。我用修改后的 Set 保存 Person 并让 JPA 级联我的更改。尽管 Person、Address 和 LinkPersonAddress 的所有 Spring Data Repositories 都使用 @JaversSpringDataAuditable 进行了注释,但我无法使用带有类 Person 和 Id #1 的 Javers QueryBuilder 检索此“更新”。这是有道理的,因为我应该改为查询类 LinkPersonAddress,但是我如何指定我只需要来自 LinkPersonAddress 的与 Id #1 相关的更改。

PS:请原谅代码片段中的任何拼写错误,因为我没有在我的开发环境中编写它。

4

1 回答 1

0

让我们从映射开始。你做错了,地址是一个经典的值对象(见https://javers.org/documentation/domain-configuration/#value-object)而不是实体。因为:

  • 地址没有自己的身份(数据库序列生成的主键不计算在内)
  • 地址归个人实体所有。带有地址的人构成了聚合。

更正映射时,可以使用 ChildValueObjects 过滤器,请参阅https://javers.org/documentation/jql-examples/#child-value-objects-filter

于 2017-06-27T11:03:58.893 回答