Pull to refresh

Comments 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 обновления, когда можно спокойно сидеть на стабильной ветке, просто со всеми патчами безопасности?

Sign up to leave a comment.