revisionrepository返回具有不同列表实现的实体(persistencebag->listproxy)

f0brbegy  于 2021-07-03  发布在  Java
关注(0)|答案(1)|浏览(336)
org.springframework.data.repository.history.RevisionRepository
Entity entity = repository.findLastChangeRevision(entity.getId()).get().getEntity();

返回列表为listproxy的实体。
正常积垢

repository.findById(id)

返回具有相同内容的相同实体,但列表类型为persistentbag。
在集成测试中Assert这两个对象的这种不同情况是一个问题。
有什么解决办法吗?

yvt65v4c

yvt65v4c1#

不要测试内容是否相等,而要测试内容是否相等。如何做到这一点取决于您使用的测试和Assert库。
例如,assertj containsExactlyInAnyOrder 以及 containsExactly 为了这个。
一些模糊的背景
hibernate,通常所有jpa实现和大多数orms要么替换/操作类的字节码,要么使用代理或特殊实现来完成它们的工作。一个重要的部分是脏跟踪,即jpa会在您更改实体时注意到,例如通过向集合中添加元素。为了做到这一点,他们必须做一些魔术,比如用通知jpa实现此类操作的其他类替换列表。
因此,您可能会在实体示例中找到来自jpa实现的实现。

相关问题