我有一个域对象,其中包含一个包含许多项的列表。项目顺序由hibernate(@OrderColumn)维护。此外,我仔细检查了订单栏是否正确设置。
由于列表可能很长,我试图获取这样的项目:
Query query = session.createQuery("Select d.list From DomainObject d where d.key = :key");
query.setFirstResult(0);
query.setMaxResults(10);
query.list();
不幸的是,没有订购返回的列表。目前,我获得有序列表的唯一方法是修改我的查询:
Query query = session.createQuery("Select d From DomainObject d where d.key = :key");
query.uniqueResult();
似乎hibernate只在它们位于域对象中时才进行项目排序。
由于后面的解决方案可能会产生很大的内存影响,我想知道是否有办法让hibernate返回列表的有序子集。
答案 0 :(得分:0)
标准可以如下使用。 请根据您的要求更改以下代码:
@Override
public List<Certification> loadAll() {
Criteria criteria = template.getSessionFactory().getCurrentSession().createCriteria(Certification.class);
criteria.setProjection(Projections.projectionList()
.add(Projections.property("certificationAbbr"),"certificationAbbr")
.add(Projections.property("certificationDesc"),"certificationDesc"))
.addOrder(Order.asc("certificationAbbr"))
.setResultTransformer(Transformers.aliasToBean(Certification.class));
return criteria.list();
}