当前位置: 首页 > 知识库问答 >
问题:

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

郤旭东
2023-03-14

我是Stackoverflow的新手,所以我会尽我所能符合用法。我想知道是否有办法获得给定实体的更改/快照的完整列表。目前,它可以很好地用于单数属性的编辑,以及对集合属性的添加和删除。但我无法找到集合属性中的子实体何时更新。

给定两个实体和一个链接实体:

@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-

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

共有1个答案

韩羽
2023-03-14

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

  • 地址没有自己的标识(由db序列生成的主键不计算)
  • 地址由个人实体所有。带地址的人构成聚合

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

 类似资料:
  • 我已经尝试使用Spring Boot+Spring Data JPA更新实体很久了。我得到所有正确的观点回到我。我的编辑视图按ID向我返回正确的实体。一切进展顺利。直到我实际尝试保存/合并/持久化对象。每次我拿回一个有新ID的新实体。我只是不知道为什么。我看了网上的例子,还有你可能会参考的重复问题的链接。那么,在这些代码中,我在哪里犯了错误呢? 在这段代码之后。我的视图将我返回到正确的URL,但I

  • 我通常使用JPQL查询数据库,但今天我不得不使用原生查询,因为性能原因和JPQL中没有的特性(联接子查询)。使用JPQL,可以使用join fetch来检索父实体及其子实体集合。然而,当我尝试使用本机查询时,对于每个父实体,将返回多行,每行包含父实体及其子实体之一的数据。然后返回的列表包含父级的重复对象。假设一个父级有两个子级,那么下面的查询将在列表中返回2个父级,而不是1个。 任何人都知道如何避

  • 问题内容: 这是我的情况,我有两个基本的POJO,并给出了一个简单的hibernate映射: 我的SQL查询返回的行看起来像这样: 我的hibernate查询如下所示: 这是每个部分的内容:Hibernate文档的18.1.3:http : //docs.jboss.org/hibernate/core/3.6/reference/zh- CN/html/querysql.html#d0e1746

  • 问题内容: 我正在写一个跨三个表的JPQL查询。在我的结果列表中,我想获得每个匹配行的所有三个实体(希望如此)。 有任何想法吗? Hibernate 3.x是我的JPA提供程序。 问题答案: IIRC,您可以执行,结果将是,其中数组内容将包含o1,o2,o3值。

  • 主要内容:JPA实体更新示例JPA允许我们通过更新实体来更改数据库中的记录。 JPA实体更新示例 在这里,我们将演示如何根据主键更新学生的年龄。 完整的项目代码如下所示 - 这个例子包含以下步骤 - 第1步: 在包下创建一个名为的实体类,它包含属性:,和。 文件:StudentEntity.java 的代码如下 - 第2步: 将实体类和其他数据库配置映射到文件中。 文件:persistence.xml 的代码如下 - 在包下

  • 我想使用JaVers来跟踪我的Java对象的更改。基本示例工作正常,但我无法让它检测存储在集合中的对象的更改。 如果我扩展ChangeLogExample。更改例如其中一个子坐标的课堂示例: 这是打印的更改日志: 因此,第一个下属的年龄变化不会显示在变更日志中。 使用withChildValueObjects()没有什么不同。 当我单独将更改提交给员工实例时,我会得到学员年龄的更改,但这不是我想要