setTimeout() для режима гибернации, похоже, не работает

#java #sql #hibernate #session-timeout

Вопрос:

Я пытаюсь установить тайм-аут таким образом, чтобы, если для возврата запроса на гибернацию потребуется больше определенного времени, я хотел бы завершить запрос и создать исключение. Но никогда не возникает исключение, каждый раз, когда запрос успешно завершается, даже если время ожидания установлено равным 0. Вот кодовый блок:

   final Query<T> query = this.currentSession()
     .createQuery(criteria);

  dateParameters.forEach(query::setParameter);
  numberParameters.forEach(query::setParameter);
  textParameters.forEach(query::setParameter);

  List<T> result = new ArrayList<>();
  try {
      result = query.setTimeout(0).list();
  } catch (Exception e) {
      e.printStackTrace();
      throw new TimeoutException("Timeout!!!");
  }
  return resu<
 

Я также пробовал использовать:

 .setHint("javax.persistence.query.timeout", 1).list();

.setHint("org.hibernate.timeout", 0).list();
 

Определенно чего-то здесь не хватает, любая помощь будет очень признательна!

Ответ №1:

Поддержка тайм-аутов зависит от поддержки драйверов JDBC, и большинство драйверов JDBC не поддерживают этот AFAIK. Однако обычно существуют настройки для тайм-аутов глобальной блокировки/запроса/инструкции.