【问题标题】:Hibernate timeout does not work in postgresql 10休眠超时在 postgresql 10 中不起作用
【发布时间】:2019-02-22 16:25:49
【问题描述】:

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()

查询返回了 7000 行...但是超时不起作用。

【问题讨论】:

    标签: postgresql hibernate timeout settimeout query-timeout


    【解决方案1】:

    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);
            });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-11-15
      • 1970-01-01
      • 2015-11-03
      • 1970-01-01
      • 2015-10-28
      • 2023-03-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多