別のクラス Comment への OneToMany 注釈を持つクラス Video があります。
@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);