如何在冬眠中限制对象的属性中的集合?

lov*_*ing 1 java sql orm hibernate jpa

我有两个实体:项目和投标,每个项目都有很多投标,因此投标是项目的集合属性。

在显示项目的页面中,我只想显示有关此“项目”的出价的前10条记录。

所以,我这样做查询:

from item
left join fetch item.bids
where item.id=3
...
Run Code Online (Sandbox Code Playgroud)

但这将获取有关某个项目的所有出价,因此,如何限制该项目的出价?

Vla*_*cea 5

如果您还具有从出价到项目的关联,则效果会更好。

然后,您可以选择项目并应用限制限制:

session
    .createQuery(
    "select b
    from bid b
    join fetch b.item i
    where 
        i.id=3")
    .setMaxResult(10)
    .list();
Run Code Online (Sandbox Code Playgroud)

您上一个查询,即选择项目和获取投标的查询将始终选择所有项目及其所有出价,并在内存中应用最大结果限制。这是因为Hibernate必须始终获取所有子项,而不能给您部分收集结果。

选择孩子并加入父母是更好的选择。该限制适用于所选的孩子,没有任何限制。