2016-01-16 2 views
-1

Я хочу читать данные из базы данных с помощью Hibernate. Я хочу начать с первой строки, прочитать 200 строк и обработать их, а затем прочитать следующие 200 строк. Но Hibernate каждый раз возвращает случайную строку.Почему Hibernate возвращает случайный результат?

Этот метод читается из базы данных.

public List getPages(int start, int end) { 
    Criteria queryCriteria = session.createCriteria(Page.class); 
    queryCriteria.setFirstResult(start).setMaxResults(end); 
    return queryCriteria.list(); 
} 

public void MyFunction(){ 
    while (readFlag) { 

     //get page from database; 
     List<Page> pagesList = database.getPages(startFromDatabaseIndex, 
        READ_FROM_DATABASE_SIZE); 

     if ((pagesList == null) || (pagesList.size() == 0)) { 
      break; 
     } 
     if (pagesList.size() < READ_FROM_DATABASE_SIZE) { 
       readFlag = false; 
     } else { 
      startFromDatabaseIndex = startFromDatabaseIndex + 200; 
     } 

     for (int i = 0; i < pagesList.size(); i++) { 
      process(); 
     } 
    } 
} 
+0

'Но Hibernate возвращает случайное число evry time', что вы подразумеваете под этим? –

+1

Что вы выполняете _query_? Если вы явно не укажете порядок, данные будут возвращены в произвольном порядке. Так работают РСУБД; ничего общего с Hibernate, по сути. –

ответ

5

Для извлечения данных из базы данных с помощью разбиения на страницы необходимо определить критерий сортировки на основе которым вы можете определить, что вы имеете в виду для первых 200 строк, в противном случае баз данных (не спящий режим) вернет 200 строк в порядке который не определен вами и может измениться после некоторой модификации данных в базе данных.

+0

Спасибо, это работает. Я добавляю этот код в свой код: queryCriteria.addOrder (Order.asc («id»)); Как я могу получить строки в моем добавленном порядке? – Nasir

+1

Если идентификатор не эквивалентен порядку вставки, вы можете добавить временную метку создания и использовать ее для извлечения данных. В этом случае сортируйте по двум полям, сначала create_timestamp, чем id, чтобы быть уверенным, что если две записи имеют одну и ту же дату создания, у вас нет проблем. –

+0

Спасибо. .... – Nasir

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