使用OneToMany Fetch的Hibernate maxResults将子项计为结果行

时间:2013-01-08 19:35:48

标签: hibernate fetch hibernate-annotations hibernate-onetomany

我有一个类视频,它有一个OneToMany注释到另一个类Comment。

@OneToMany(fetch = FetchType.LAZY, mappedBy = "videoId", cascade = CascadeType.ALL, orphanRemoval = true)
@Sort(type = SortType.COMPARATOR, comparator = CommentComparator.class)

我在我的查询中设置了setMaxResults(4),希望只检索最后4个视频。如果任何视频都没有评论,则此功能非常有用。但是,如果我为每个视频指定了多个注释,我的查询现在返回的视频少于4个(我认为它将获取的行计为maxResult)。

如何确保在查询中返回所有4个视频?

public <T>List<T> find(Class<T> clazz, Order order, int maxResults, List<String> fetch, List<Criterion> expressions)
{
    Criteria criteria = getCurrentSession().createCriteria(clazz);
    for (Criterion ex : expressions)
    {
        criteria.add(ex);
    }
    if (maxResults > 0)
    {
        criteria.setMaxResults(maxResults);
    }

    if (fetch != null)
    {
        for (String f : fetch)
        {
            criteria.setFetchMode(f, FetchMode.JOIN);
        }
    }
    criteria.addOrder(order);

    criteria.setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY);

    return criteria.list();
}

我正在打电话

return myDao.find(Video.class, Order.desc("id"), maxResult, fetch, criteria);

0 个答案:

没有答案