Как стать автором
Обновить

Комментарии 12

А зачем вообще hibernate отправляет заведомо бесполезный запрос в бд в этом случае?

Конкретно здесь, может быть и можно было обойтись без запроса вообще. Наверно это не так просто сделать, когда это подзапрос, или какой-то более сложный кейс, с джоинами например.
Возможно, чтобы не городить множество оптимизаций на все случаи жизни, просто отключают ветку с помощью условия 1 = 0;

Интересно другое: перед каждым запросом к базе с новыми параметрами генерируется новый SQL в зависимости от параметров?

Этот вопрос надо не Hibernate адресовать, а Spring-у.

Почему?

Вы правы - не туда посмотрел - думал что речь про derived-query.

Осталось дождаться включения этого фикса в модуль Spring Data JPA.

А зачем дожидаться? Если можно просто обновить используемую версию хибера? Или автор свидетель тождественности спрингдатажпа и с хибером?

На самом деле, надо дождаться, пока выйдет новая версия Hibernate. Баг поправили в мастере.

Ну, собственно, о том и речь. Багу исправили в хибере и к спринг дате он относится чуть менее, чем никак.

С in-clause вообще лучше быть осторожным. В постгресе вроде бы ограничений нет, а в оракле, например, по дефолту не более 1000 аргументов -- соответственно, надо разбивать на чанки и конкатенировать результат.

Если бизнес-логика позволяет (как в данном конкретном случае), имеет смысл предварить в репозитории

interface ArticleRepository extends CrudRepository<Article, UUID> {
  default List<Article> findByPublisherId(List<UUID> ids) {
    if (ids.isEmpty()) {
     return Collections.emtpyList();
    }
    return _findByPublisherId(ids);
  }
  
  @Query("from Article where publisherId in :ids")
  List<Article> _findByPublisherId(List<UUID> ids);
}

Если метод совсем безобразно могут вызывать, ещё и проверку на null добавить.

В postgres, кстати, тоже есть ограничения, правда не такие строгие, там что-то в районе 65000 параметров на весь запрос (думаю что 2 в 16 степени таки), а не на один in clause.

Не была печали, апдейтов накачали.

Сори, но зачем вам edge обновления, когда можно спокойно сидеть на стабильной ветке, просто со всеми патчами безопасности?

Зарегистрируйтесь на Хабре, чтобы оставить комментарий