0
产生不必要的顺序我有一个相当复杂的数据模型,因此一个相当复杂的查询(使用标准的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
这里是我的问题:为了通过underlying12_.ric ASC是完全不必要的,并当然这会导致我的结果排序错误。
我完全不知道声明来自何处以及如何摆脱它。欢迎任何帮助:-)
更新:在我自己的代码中找到order by
声明。这个问题当然可以结束。
您是否尝试过使用标准查询的标准(和便携式)JPA语法? – perissf 2012-03-24 13:41:49
我现在正在这样做。但是这是一个重大的重构,我绝对想要了解标准查询出了什么问题。不能说我是第一个试图订购一些加入实体的人,不是吗? – 2012-03-24 14:12:51
呃..你不可能是第一个试图订购联合实体的人。无论如何,重构你的查询到可移植JPA似乎不是一个市长的任务,如果你需要指导,我可以提供帮助。 – perissf 2012-03-24 14:18:04