Criteria-API - Hibernate生成不需要的order by语句

时间:2012-03-24 12:39:15

标签: hibernate orm criteria-api

我有一个相当复杂的数据模型,因此有一个相当复杂的查询(使用条件API):

这是我的标准:

Criteria criteria = getSession().createCriteria(MyClass.class);

criteria.setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY)
                    .setFetchMode("pricedBy", FetchMode.JOIN)
                    .setFetchMode("canceledBy", FetchMode.JOIN)
                    .setFetchMode("product", FetchMode.JOIN)
                    .setFetchMode("product.underlyings", FetchMode.JOIN)
                    .setFetchMode("product.tradedBy", FetchMode.JOIN)
                    .setFetchMode("product.requestedBy", FetchMode.JOIN)
                    .setFetchMode("fileUploads", FetchMode.JOIN)
                    .add(Restrictions.eq("issuer.id", issuerCompanyId));

criteria.addOrder(Order.desc("product.id"));

criteria.setFirstResult(pagingParams.getDisplayStart())
            .setMaxResults(pagingParams.getDisplayLength());

 List<MyClass> result =  criteria.list()

没有更多,没有跳过。

如果我现在看一下生成的SQL(非常大的声明),它就会这样结束:

...and this_.issuer_id=? order by underlying12_.ric asc, this_.product_id desc

这是我的问题:底层12_.ric asc 的顺序是完全不需要的,当然它会导致我的结果排序错误。

我完全不知道该陈述的来源以及如何摆脱它。欢迎任何帮助: - )

更新:在我自己的代码中找到order by语句。这个问题当然可以结束。

1 个答案:

答案 0 :(得分:1)

我的坏。刚刚发现了从产品到底层的这种映射:

@OrderBy(值= “RIC”)
private Set underlyings = new HashSet();