【发布时间】:2012-03-24 12:39:15
【问题描述】:
我有一个相当复杂的数据模型,因此有一个相当复杂的查询(使用标准 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
这是我的问题:order by based12_.ric asc 是完全不需要的,当然它会导致我的结果排序错误。
我完全不知道该声明来自何处以及如何摆脱它。欢迎任何帮助:-)
更新:在我自己的代码中找到了 order by 语句。这个问题当然可以结束。
【问题讨论】:
-
您是否尝试过为您的条件查询使用标准(和可移植)JPA 语法?
-
我现在正在这样做。但这是一个重大的重构,我肯定更愿意了解条件查询出了什么问题。不可能我是第一个尝试订购一些连接实体的人,不是吗?
-
嗯.. 听起来您不太可能是第一个尝试订购连接实体的人。无论如何,将您的查询重构为可移植 JPA 似乎不是一项重要任务,如果您需要指导,我可以提供帮助。
-
感谢您的帮助 - 我只想提一下,我跳过了根据各种过滤器、排序和分页要求生成标准的几百行代码 :-)
-
哇。很高兴知道您已经能够找到问题所在!
标签: hibernate orm criteria-api