【问题标题】:DB not returning response数据库不返回响应
【发布时间】:2014-12-19 13:28:57
【问题描述】:

我正在使用 Spring + Hibernate。下面是我的 java 方法中的代码 sn-p。发出查询后等待很长时间。桌子尺寸非常小。它是间歇性发生的(并非总是如此)。我没有遇到任何例外。能否请您告诉我如何调试此问题。

代码片段:

BigDecimal id = null;
id = (BigDecimal) getHibernateTemplate().execute(new HibernateCallback<Object>() {
    public Object doInHibernate(Session session)throws HibernateException, SQLException {
    Query roleDetails = session.createSQLQuery("select role_id from employee where emp_id = '"+eid+"'");
                    return roleDetails.uniqueResult();
}
});

【问题讨论】:

  • 需要多长时间?使用 System.currentTimeInMillis() 计时,并通过 SQLDeveloper 执行相同的查询来验证它。
  • 查询很简单。如果我在 TOAD 中运行,它只需要几毫秒。问题是间歇性的。
  • 您可能还想对查询执行 SQL EXPLAIN 计划。

标签: java spring oracle hibernate


【解决方案1】:

根据给定的详细信息,很难理解问题的根本原因是什么。我会建议两件事

  1. 代理您的数据源并从 java 端查看查询执行时间。您可以使用datasource-proxy 库来做到这一点。

  2. 如果 oracle 端出现问题,请跟踪 oracle sessionsunderstand

【讨论】:

    【解决方案2】:

    Hibernate 和 Oracle 中的查询都存在缓存,但它只有在使用带参数的准备好的语句时才能正常工作,否则反而会造成伤害。

    尝试将代码中的字符串连接更改为参数化查询:

    Query roleDetails = session.createSQLQuery("select role_id from employee where emp_id = ':empId").setInteger("empId", eid);
    

    【讨论】:

      猜你喜欢
      • 2013-09-15
      • 1970-01-01
      • 2019-05-24
      • 2018-10-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-16
      相关资源
      最近更新 更多