在一个项目中,有一个大型的jpa查询,例如
@Query( "select foo from FooEntity
left join fetch foo.bars bars
join fetch bars.baz "
/** ca 10 more entities with join fetch and left join fetch" */
"where" /** some conditions */
"order by foo.id")
Stream<FooEntity> getFoos()
现在,我尝试将其更改为List<FooEntity>
(因为客户端仅叫collect(toList())
),但是它破坏了一些测试,其中包含重复项。使用Set<FooEntity>
时,其行为与Stream<FooEntity>
相同。
在没有详细讨论大型查询的情况下,它是“可以”,预期的行为,还是表明查询中存在一些错误?
我还研究了诸如Is it valid for Hibernate list() to return duplicates?之类的问题,但是Stream
和List
之间是否有某些差异,可以在某些规范中定义?
对于所有返回类型,Hibernate生成的SQL都是相同的