Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Объясните логику работы выборки из базы!!! / 5 сообщений из 5, страница 1 из 1
28.08.2014, 07:37
    #38731109
JulT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объясните логику работы выборки из базы!!!
В базе есть такие водители(11 человек):
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
phone = +79133344500 name = Григорий
phone = +79831244444 name = Сергей
phone = +79037757887 name = Дима
phone = +79135656565 name = Наталия
phone = +79134545454 name = Светлана
phone = +79131212122 name = Антон
phone = +79530000000 name = Сергей
phone = +79531111111 name = Николай
phone = +79052222222 name = Роман
phone = +79134444444 name = Юлия
phone = +79133333333 name = Александр


Есть код, который выбирает водителей, либо всех, либо по маске (если задана):
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
Criteria criteria = session.createCriteria(Driver.class);

    criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);

    if(nameMask!=null){
        Criterion name = Restrictions.ilike("firstName", "%" + nameMask + "%");
        criteria.add(name);
    }
    if(phoneMask!=null){
        Criterion pMask = Restrictions.ilike("phone", "%" + phoneMask + "%");
        criteria.add(pMask);
    }
    if(carModelMask!=null){
        Criterion carModMask = Restrictions.ilike("autoModel", "%" + carModelMask + "%");
        criteria.add(carModMask);
    }
    if(carNumberMask!=null){
        Criterion carNumMask = Restrictions.ilike("autoNumber", "%" + carNumberMask + "%");
        criteria.add(carNumMask);
    }

    List<Driver> listRes = criteria.list();


Все работает прекрасно ровно до тех пор, пока я не добавляю две строчки:
Код: java
1.
2.
3.
    
    criteria.setFirstResult(fromPosition);
    criteria.setMaxResults(countItems);


И после этого начинается какой-то бред.
Например, когда задаю выводить от 0 до 5 и ищу по всем (т.е. без фильтров):
Код: java
1.
2.
3.
    
    criteria.setFirstResult(0);
    criteria.setMaxResults(5);


мне выдает только первых 3 водителя, но по идее должен выдавать 5, ведь я указала от 0 до 5:
Код: java
1.
2.
3.
phone = +79133344500 name = Григорий
phone = +79831244444 name = Сергей
phone = +79037757887 name = Дима


Экспериментирую дальше, ставлю от 0 до 20:
Код: java
1.
2.
3.
    
    criteria.setFirstResult(0);
    criteria.setMaxResults(20);


выдает всех 11.
Что за странное поведение, как вообще работает этот setFirstResult и setMaxResults.
Тоже самое происходит тогда, когда устанавливаю поиск по, например, телефону phoneMask, если безе setFirstResult и setMaxResults, все супер, как только добавляю setFirstResult и setMaxResults - выводит непонятное кол-во записей. Очень прошу помочь иначе начальство меня прибьет. Заранее благодарна.
...
Рейтинг: 0 / 0
28.08.2014, 07:57
    #38731124
AlexJm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объясните логику работы выборки из базы!!!
JulTОчень прошу помочь иначе начальство меня прибьет. Заранее благодарна.
думаю, для начала неплохо было бы посмотреть на тот SQL, который генерит Hibernate (ведь это он?). Т.е. включить logging. Иначе начальство нас прибьет.
...
Рейтинг: 0 / 0
28.08.2014, 14:43
    #38731674
JulT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объясните логику работы выборки из базы!!!
Проблема решилась. В сущности Driver было замаплено следующее поле:
Код: java
1.
2.
    @ElementCollection(fetch = FetchType.EAGER)
    private List<String> photosCarsUrl = new ArrayList<>();


из-за EAGER данные подгружались сразу же, данные в photosCarsUrl на картинке.
убрала (fetch = FetchType.EAGER) и проблема решилась, в том числе и решилась проблема с дублями
...
Рейтинг: 0 / 0
28.08.2014, 15:06
    #38731728
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объясните логику работы выборки из базы!!!
JulT, у вас большие провалы в понимании того что такое база данных
и в частности Consistency (Согласованность). Пока не будете понимать
вас будут бить и бить.

И Hibernate вовсе не освобождает от необходимости понимать механизмы работы БД.
...
Рейтинг: 0 / 0
28.08.2014, 15:19
    #38731754
JulT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объясните логику работы выборки из базы!!!
maytonJulT, у вас большие провалы в понимании того что такое база данных
и в частности Consistency (Согласованность). Пока не будете понимать
вас будут бить и бить.

И Hibernate вовсе не освобождает от необходимости понимать механизмы работы БД.
дело в том, что код с которым я работаю достался мне по наследству. я дописываю к нему новый функционал, из-за этого периодически вылетают различные ошибки, которые приходится сначала осознавать, а после исправлять
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Объясните логику работы выборки из базы!!! / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]