Таймаут гибернации не работает в postgresql 10 - PullRequest
0 голосов
/ 22 февраля 2019

persistence.xml:

      <properties>
        <property name="showSql" value="true"/>
        <property name="hibernate.dialect" value="${hibernate.dialect:org.hibernate.dialect.Oracle10gDialect}"/>
        <propertyname="hibernate.connection.datasource"value="java:/alarmmgr/alarmMonitorDB"/>
        <property name="hibernate.show_sql" value="true"/>
        <property name="hibernate.format_sql" value="false"/>
        <property name="hibernate.use_sql_comments" value="false"/>
        <property name="hibernate.jdbc.wrap_result_sets" value="false"/>
        <property name="hibernate.hibernate.cache.use_query_cache" value="true"/>
        <property name="javax.persistence.query.timeout" value="1" />

    </properties>

запрос:

em.createQuery(query).setHint("javax.persistence.query.timeout", 1)
                                    .setFirstResult(payload.getStart())
                                    .setMaxResults(payload.getSize() > MAX_FETCH ? MAX_FETCH : payload.getSize())
                                    .getResultList()

Запрос возвратил 7 тысяч строк ... но время ожидания не работает.

1 Ответ

0 голосов
/ 01 марта 2019

Драйвер JDBC Postgresql не работает со свойством javax.persistence.query.timeout, поэтому я сделал обходной путь.

em.unwrap(Session.class).doWork(connection -> {
            long maxTimeOutMil = TimeUnit.SECONDS.toMillis(MAX_TIMEOUT);
            connection.createStatement().execute("set statement_timeout = " + maxTimeOutMil);
        });
...