2012-03-24 161 views
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声明。这个问题当然可以结束。

+0

您是否尝试过使用标准查询的标准(和便携式)JPA语法? – perissf 2012-03-24 13:41:49

+0

我现在正在这样做。但是这是一个重大的重构,我绝对想要了解标准查询出了什么问题。不能说我是第一个试图订购一些加入实体的人,不是吗? – 2012-03-24 14:12:51

+0

呃..你不可能是第一个试图订购联合实体的人。无论如何,重构你的查询到可移植JPA似乎不是一个市长的任务,如果你需要指导,我可以提供帮助。 – perissf 2012-03-24 14:18:04

回答

0

我的不好。刚发现从产品这个映射到底层:

@OrderBy(值= “RIC”)
私订标的=新的HashSet();