powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Объясните логику работы выборки из базы!!!
5 сообщений из 5, страница 1 из 1
Объясните логику работы выборки из базы!!!
    #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
Объясните логику работы выборки из базы!!!
    #38731124
AlexJm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JulTОчень прошу помочь иначе начальство меня прибьет. Заранее благодарна.
думаю, для начала неплохо было бы посмотреть на тот SQL, который генерит Hibernate (ведь это он?). Т.е. включить logging. Иначе начальство нас прибьет.
...
Рейтинг: 0 / 0
Объясните логику работы выборки из базы!!!
    #38731674
JulT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проблема решилась. В сущности Driver было замаплено следующее поле:
Код: java
1.
2.
    @ElementCollection(fetch = FetchType.EAGER)
    private List<String> photosCarsUrl = new ArrayList<>();


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

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

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


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