0
org.springframework.data.repository.history.RevisionRepository
Entity entity = repository.findLastChangeRevision(entity.getId()).get().getEntity();

返回列表为 ListProxy 的实体。

正常的 CrudRepository

repository.findById(id)

返回具有相同内容的相同实体,但列表类型为 PersistentBag。

在集成测试中断言这两个对象的这种差异案例问题。

有什么解决办法吗?

4

1 回答 1

1

不要测试是否相等,而是要测试内容的平等。如何做到这一点取决于您使用的测试和断言库。

AssertJ 例如有containsExactlyInAnyOrdercontainsExactly为此。

一些模糊的背景

Hibernate 和一般所有 JPA 实现和大多数 ORM 要么替换/操作类的字节码,要么使用代理或特殊实现来完成它们的工作。一个重要的部分是脏跟踪,即当您更改实体时,JPA 会注意到,例如通过将元素添加到集合中。为了做到这一点,他们必须做一些魔术,比如用其他类替换您的列表,通知 JPA 实现此类操作。

因此,您可能会在实体实例中找到 JPA 实现的实现。

于 2020-12-07T12:43:02.863 回答