JaVers,SpringDatat,JPA:查询集合中的实体更新

时间:2017-06-27 09:16:07

标签: jpa spring-data javers

我是Stackoverflow的新手,所以我会尽力满足使用要求。我想知道是否有办法获得给定实体的更改/快照的完整列表。目前,它适用于Singular Properties的版本,以及Collection Property的添加和删除。但我无法找到收集属性中的子实体何时更新。

给出两个实体和一个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-&gt; WORK)。我使用修改后的Set保存Person并让JPA Cascade进行更改。尽管所有用于Person,Address和LinkPersonAddress的Spring数据存储库都使用@JaversSpringDataAuditable注释,但我无法检索此更新&#34;使用Javers QueryBuilder与Person和Id#1类。这是有意义的,因为我应该查询类LinkPersonAddress,但我如何指定我只想要LinkPersonAddress的更改与Id#1的人相关。

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

1 个答案:

答案 0 :(得分:0)

让我们从映射开始。你做错了,Address是一个经典的ValueObject(见https://javers.org/documentation/domain-configuration/#value-object)而不是Entity。这是因为:

  • 地址没有自己的身份(由db序列生成的主键不算)
  • 地址归Person Entity所有。具有其地址的人形成聚合。

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