按Hibernate Criteria API排序一对多关系

时间:2016-03-02 17:09:36

标签: java hibernate hibernate-criteria

我正在尝试使用hibernate条件API订购查询。我的对象模型如下对象A具有对象B的一对多。 我正在尝试按照以下顺序进行分页

B.f1
A.field1
A.field2

因此,我创建条件的对象B中的映射是

@ManyToOne(fetch = FetchType.LAZY)
    @Cascade({CascadeType.ALL})
    @JoinColumn(name = "a_name", nullable = false)
    public A getA() {
        return this.a;
    }

我为对象B创建了一个标准api

Criteria criteria = session.createCriteria(B.class);

然后我为这个critera添加一些限制,并为对象A创建一个Criteria,并按对象A的子句添加顺序。

//add some restrictions for object B
Criteria aCriteria = criteria.createCriteria("A");
//Criteria aCriteria = criteria.createAlias("A", "a");
processaFilters(aCriteria, filters);
aCriteria.addOrder(Order.asc("field1"));
aCriteria.addOrder(Order.asc("field2"));

然后我按对象B的条件添加订单

criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);
        criteria.setProjection(Projections.rowCount());
        Long rowCount = (Long) criteria.uniqueResult();

        criteria.setProjection(null);
        criteria.setFirstResult(offset!=null ? offset : 0);
        criteria.setMaxResults(maxResult!=null ? maxResult : 10);
        criteria.addOrder(Order.asc("f1"));

        List<B> bList = criteria.list();

然而,这并没有以正确的方式排序。我已经阅读了别名并尝试了但不确定如何实现它。我的条件查询没有任何问题,因为它工作正常,只有在我实现分页后才需要添加排序 有什么指针吗? 感谢

更新:

我尝试通过执行以下操作来创建别名:

criteria.createAlias("A", "c");
processClaimantFilters(criteria, filters);

并在方法中     processaFilters(aCriteria,过滤器);

我更改了所有属性以使用c例如

if (filters.getind() != null) {
            aCriteria.add(Restrictions.eq("c.ind",   filters.getInd()));
    }

我删除了一些东西,只是为了查看它是否可行,但是当我打电话时

List<B> bList = criteria.list();

返回结果不是B类型的对象,而是包含对象A和B的Object []列表。所以我想我没有正确使用别名

0 个答案:

没有答案