Отличный доклад. К нему хорошо дополняет статья на Хабре. Хорошо рассказываете
@Denleont Жыл бұрын
Спасибо за интересный доклад! мы в своё время тоже столкнулись с этой проблемой пагинации в памяти приложения. Мало кто в принципе знает об этой проблеме
@arvgord8 ай бұрын
Спасибо! Рад, что вам было интересно.
@alekseyshibayev524311 ай бұрын
1. Спасибо за доклад. Тоже рою jpa. 2. На 12 минуте понял к чему ты клонишь, если бы ты использовал List, а не Set, то получил бы исключение, загуглив которое, ты нашел бы статью от Влада Михалсеа. Где он пишет, что Set не решает проблему, а под капотом будет декартово произведение. 3. Я написал самописный динамический ентити граф, через дерево и сабграфы. Интересно попробовать его вместе с батч сайзом, написаным в ручную через цикл по айдишникам.
@MaximBodrov Жыл бұрын
Спасибо Артему! BatchSize классная в данном случае штука! Но как я понял, она имеет преимущество над вторым подходом в случае, когда дочерних объектов слишком много (10-20-больше). Если пара-тройка, то они оба хороши
@maximelmanov6719 Жыл бұрын
Она имеет преимущество из-за 2-х запросов к бд, что занимает значительное время. Плюс риски дисконекта увеличиваются
@arvgord8 ай бұрын
Если в связанных коллекциях содержится небольшое количество объектов и у вас всего несколько коллекций @OneToMany, то значительной разницы вы не заметите.
@Batyrev Жыл бұрын
Спасибо за доклад! Интересно что уже не в первый раз встречаю мнение о том что нативный запрос "написанный ручками" или вью как-то решают описанные в докладе проблемы с декартовым произведением. По сути дела те же самые джоины уйдут в нативный запрос или во вью, а декартово произведение никуда не денется + к этому ещё нужно будет как-то прикрутить пагинацию! К сожалению это осознаётся только когда непосредственно столкнёшься с реализацией...
@maximelmanov6719 Жыл бұрын
Query DSL/jpa streamer в помощь
@maximelmanov6719 Жыл бұрын
Был очень удивлен, что не было слов про query dsl или jpa streamer. Человек посмотрит и ришит, буду использовать batchsize, минусы которого очевидны. Или два запроса к бд, что тоже очень странно в наше время. В любом случае доклад - это большое дело, но ожидания совсем неоправдали себя(
@arvgord8 ай бұрын
Мне было бы интересно узнать, как Query DSL или JPA Streamer решают проблему декартова произведения в запросах с пагинацией. Если у вас есть примеры рабочего кода, например, на GitHub, я бы с удовольствием ознакомился с ними.
@vladimir.kravets Жыл бұрын
Зачем вообще хибер в микросервисах? На сколько там развестая модель предметной области у микросервиса? По итогу абстракция протекает везде где можно и нельзя... Столько упражнений, а по факту проще написать один не очень сложный запрос ручками и не страдать фигней.
@dmitrysmirnov5575 Жыл бұрын
или вьюху на стороне БД и проецировать это куда хочешь на стороне джава и делать старую добрую пагинацию из коробки. Как-то все сложно у автора
@maximelmanov6719 Жыл бұрын
Query DSL/jpa streamer в помощь
@arvgord8 ай бұрын
Использовать или не использовать Hibernate зависит от вашей конкретной задачи и предпочтений. Для небольших микросервисов может быть вполне достаточно JdbcTemplate. Для микросервисов со сложной бизнес-логикой Hibernate позволяет быстро реализовывать необходимый функционал. Когда у вас динамические запросы с фильтрацией и сортировкой по десяти полям, это существенно ускоряет работу. С помощью абстракции вы не привязаны к конкретной базе данных. Также не всегда есть возможность выбора библиотек или фреймворков в существующих проектах. В данном докладе я рассматриваю проблемы, с которыми могут столкнуться разработчики (как я столкнулся), которые уже используют Hibernate в своих проектах или только планируют его использовать.
@erlanibraev6 ай бұрын
Потому что он идёт в зависимостях spring-data-jpa 😂
@ins798 Жыл бұрын
взглянем на ситуацию шире: молодой чемодан взял абстракцию в виде языка котлин, взял абстракцию под SQL в виде хибернета, взял абстракцию в виде мэпстракта. И при использовании абстракций над абстрацией через абстракцию он обнаружил, что есть проблемы, которые надо решать. Нормальная ли это ситуация?
@ВасилийГоловко-д9и2 ай бұрын
а чем тебе не угодил mapstruct? или ты все сеттеры будешь ручками прописывать?
@ins7982 ай бұрын
@@ВасилийГоловко-д9и кто ты такой есть то, что я тебе буду сейчас все разжёвывать, иди теорию учи,ламер
@bananasba Жыл бұрын
Мне тут кто-то рассказывал как все хорошо в джаве с проекциями из бд, где ты?)
@xzib-nt5 Жыл бұрын
Наверное просто не использует хибер)
@maximelmanov6719 Жыл бұрын
Query DSL/jpa streamer в помощь
@vladimirmokeev28569 ай бұрын
Изначально говорит, что ему надо выводить количество по счетам и прочую стату. А потом пишет код, чтоб вытягивать все из базы, вместо того, чтобы агрегаты использовать. Кек
@ins798 Жыл бұрын
Да, используйте нативный запрос, если запрос сложный. Какую-то фигню наковыряли и носятся с нею.
@maximelmanov6719 Жыл бұрын
Нативный тежелее поддерживать, т.к. придется при необходимости "дебажить" строки, что не очень удобно. Query DSL/jpa streamer в помощь
@vladimirmokeev28569 ай бұрын
Какой же он не компетентный. Не может даже нормально энтити граф использовать. А "замеры скорости" - это испанский стыд. Вопрос вообще некорректный изначально. Там рост m^n, а он все чешет про 2^n. Всегда можно будет подобрать m и n, чтобы его любимчик выиграл в миллион раз. Хорошо хоть ему на это несколько раз указали потом