2013-08-05 2 views
1

все, что я делаю с запросом MySql с использованием критериев hibernate в Java. Я даю небольшой снимок моего кода ниже.Почему спящий режим Критерии, не поддерживающие порядок в результатах критериев.list()?

 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 я получаю результаты в другом порядке каждый раз, когда я выполняю код. но когда я копирую и вставляю MySql-запрос из консоли в редактор MySql, я получаю одинаковые результаты каждый раз. Конечно, в редакторе mySql должны быть одинаковые результаты. но не получается, почему критерии спячки дают мне результаты в разном порядке каждый раз?

Заранее спасибо. Каждый ответ будет оценен.

ответ

1
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); 
    } 

Я думаю, что вы проецируете свойство перед созданием псевдонима. попробуйте код выше ...

Смежные вопросы