如何在hibernate中限制Object属性中的集合?

时间:2014-08-01 04:59:57

标签: java sql hibernate jpa orm

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

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

所以,我这样查询:

from item
left join fetch item.bids
where item.id=3
...

但是这会获取有关商品的所有出价, 那么,如何限制商品的出价呢?

3 个答案:

答案 0 :(得分:4)

如果您还有从Bid到Item的关联,那么效果会更好。

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

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

您之前的查询,选择项目和提取出价的选项将始终选择包含所有出价的所有项目,并在内存中应用最大结果限制。这是因为Hibernate必须总是获取所有子节点,它不能给你部分集合结果。

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

答案 1 :(得分:1)

您可以使用条件的setFirstResult()和setMaxResult()。或者这篇文章对您的question

有帮助

示例:

sessionFactory.getCurrentSession().createQuery("your query here").setFirstResult(0).setMaxResult(10);

这将从数据库

生成10行数据

你使用了注释驱动。只需将注释大小添加到出价对象

即可
    @OneToMany( mappedBy = "object", cascade = CascadeType.ALL)
    @Size(min=1, max=10)
    private Set<Bid>    bid;

答案 2 :(得分:0)

对于纯SQL,请执行以下操作:

Select B.*
From item I, bid B,
Where T.itemId = B.itemId
Limit 10;

如果您使用标准API或HQL,则可以使用hibernate     HQL示例:

Query query = session.createQuery("from MyTable");
query.setMaxResults(10);

Criteria example: 
session.createCriteria(Abc.class)
                    .addOrder(Order.desc("id"))
                    .setMaxResults(10)
                    .list();