【问题标题】:Set timeout based on query根据查询设置超时
【发布时间】:2016-04-15 07:25:19
【问题描述】:

如何使用 Java 或 Hibernate 为某些特定查询设置超时。我面临的问题是,我有时必须获取大量数据的某些查询在较长时间内没有响应,从而导致应用程序无响应。

【问题讨论】:

    标签: java hibernate jpa settimeout


    【解决方案1】:

    Hibernate 查询有setTimeout() 方法

    Query query = session.createQuery(someQueryString);
    query.setTimeout(theTimeOut);
    

    【讨论】:

      【解决方案2】:

      JPA standard 属性 javax.persistence.query.timeout 也可以作为“提示”提供给每个查询。

      query.setHint("javax.persistence.query.timeout", someTimeout);
      

      因此避免将您的代码绑定到一个 JPA 提供程序或另一个。

      【讨论】:

        【解决方案3】:

        Hibernate 支持事务超时:

            //set transaction timeout to 5 seconds at session
            Session sess = factory.openSession();
            sess.getTransaction().setTimeout(5);
        

        您也可以在query level进行设置。

        Query q = sess.createQuery("from....")
                  .setTimeOut(3);
        

        【讨论】:

          猜你喜欢
          • 2016-06-20
          • 2011-06-14
          • 2021-02-11
          • 2011-09-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-02-26
          • 2017-06-29
          相关资源
          最近更新 更多