繁体   English   中英

为什么冬眠标准不保持criteria.list()结果的顺序?

[英]Why hibernate Criteria not maintaining order in results of criteria.list()?

我正在使用Java中的休眠条件来做MySql查询。 我在下面提供我的代码的小快照。

        Criteria criteria = getCurrentSession().createCriteria(A.class, "a");
        ProjectionList projections = Projections.projectionList();

        projections.add(Projections.distinct(Projections.property("a.column_of_a")));
        projections.add(Projections.property("b.column_of_b"));
        projections.add(Projections.property("c.column_of_c"));
        criteria.setProjection(projections);

        criteria.createAlias("a.listName1", "b", JoinType.LEFT_OUTER_JOIN);
        criteria.createAlias("b.listName2", "c", JoinType.LEFT_OUTER_JOIN);
        criteria.createAlias("c.listName3", "d", JoinType.LEFT_OUTER_JOIN);

        criteria.add(Restrictions.eq("a.column_of_a", someValue));
        criteria.add(Restrictions.eq("c.column_of_c", someValue));

        criteria.addOrder(Order.asc("a.column_of_a"));
        criteria.addOrder(Order.desc("b.column_of_b"));

        @SuppressWarnings("unchecked")
        List<Object[]> records = criteria.list();

        for(int i=0;i<3;i++)
        {
            Object record[] = records.get(i);
            Object value = record[1];
            System.out.println("value::"+value);
        }

现在的问题是,当我在Java代码中获取结果并在eclipse Console中进行打印时,每次执行代码时,我都以不同的顺序获取结果。 但是,当我从控制台将MySql查询复制并粘贴到MySql编辑器时,每次都会得到相同的结果。 当然在mySql编辑器中必须给出相同的结果。 但不知道为什么冬眠标准每次都会给我不同顺序的结果?

提前致谢。 每个答案将不胜感激。

    Criteria criteria = getCurrentSession().createCriteria(A.class, "a");


    criteria.createAlias("a.listName1", "b", JoinType.LEFT_OUTER_JOIN);
    criteria.createAlias("b.listName2", "c", JoinType.LEFT_OUTER_JOIN);
    criteria.createAlias("c.listName3", "d", JoinType.LEFT_OUTER_JOIN);

    ProjectionList projections = Projections.projectionList();

    projections.add(Projections.distinct(Projections.property("a.column_of_a")));
    projections.add(Projections.property("b.column_of_b"));
    projections.add(Projections.property("c.column_of_c"));
    criteria.setProjection(projections);

    criteria.add(Restrictions.eq("a.column_of_a", someValue));
    criteria.add(Restrictions.eq("c.column_of_c", someValue));

    criteria.addOrder(Order.asc("a.column_of_a"));
    criteria.addOrder(Order.desc("b.column_of_b"));

    @SuppressWarnings("unchecked")
    List<Object[]> records = criteria.list();

    for(int i=0;i<3;i++)
    {
        Object record[] = records.get(i);
        Object value = record[1];
        System.out.println("value::"+value);
    }

我认为您的代码在创建别名之前是投影属性。 尝试上面的代码...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM