【问题标题】:Criteria-API - Hibernate generates unwanted order by statementCriteria-API - Hibernate 按语句生成不需要的顺序
【发布时间】: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


【解决方案1】:

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

@OrderBy(value="ric")
私有集合底层 = new HashSet();

【讨论】:

    猜你喜欢
    • 2018-04-28
    • 1970-01-01
    • 1970-01-01
    • 2021-05-29
    • 1970-01-01
    • 1970-01-01
    • 2019-12-16
    • 1970-01-01
    • 2010-11-18
    相关资源
    最近更新 更多