我有两个实体:项目和出价,每个项目都有很多出价,因此出价是项目的集合属性。
在显示项目的页面中,我只想显示有关此“项目”的前10个出价记录。
所以,我这样查询:
from item
left join fetch item.bids
where item.id=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();