如题,已跟踪调试,确定只有一次调用

解决方案 »

  1.   

    不是页面请求的问题,我总共就一次请求,是请求过程中调用了dao层的一个查询方法,同一时间调用确实只有一次,但是Hibernate打印的sql显然是两条,而且经过调试发现,如果开着sql打印的话,会占用大量系统资源,从而使得效率变得很低。。希望大家能吸取个教训啊- -。
      

  2.   

    能不能把你dao层代码贴出来看看。
      

  3.   

    打印两次是不是一次是带参数,一次不带啊,有可能是架构自己带出的SQL语句。
      

  4.   

    这是service方法
    public double takeDistance(double x1,double y1,double x2,double y2) {
    Distance distance;
    double dis = 0;
    Cache cache = cacheManager.getCache("addressDistance"); Element element = cache.get(x1 + "," + y1 +","+ x2 +","+ y2);
    if (element != null) {
    dis = Double.parseDouble(element.getValue().toString());
    } else {
    // 数据库中查找
    dis = distanceDAO.getDistanceBy2Coordinate(x1, y1, x2, y2);
    if (dis != 0) {
    cache.put(new Element(x1 + "," + y1 +","+ x2 +","+ y2, dis));
    } else {
    // 从百度服务器拿
    dis = getDistanceFromBaidu(x1, y1, x2, y2);
    distance = new Distance();
    distance.setDistance(String.valueOf(dis));
    distance.setAddress1GeoX(x1);
    distance.setAddress1GeoY(y1);
    distance.setAddress2GeoX(x2);
    distance.setAddress2GeoY(y2);
    distanceDAO.saveDistance(distance);
    cache.put(new Element(x1 + "," + y1 +","+ x2 +","+ y2, dis));
    }
    }
    return dis;
    }下面是Dao
    public double getDistanceBy2Coordinate(double x1,double y1,double x2,double y2){
    double dis = 0;
    String sql = "select d.distance from distance d where d.address1_GeoX="+x1+"and d.address1_GeoY="+y1+"and d.address2_GeoX="+x2+"and d.address2_GeoY="+y2;
    Query query = this.getSession().createSQLQuery(sql);
    if(query.list() != null && query.list().size() != 0)
    dis = Double.parseDouble(query.list().get(0).toString());
    return dis;
    }
      

  5.   

    确实只有一次调用  但是打印的SQL是两次,两次参数完全一样
    Hibernate: select d.distance from distance d where d.address1_GeoX=116.567751and d.address1_GeoY=39.832861and d.address2_GeoX=116.506056and d.address2_GeoY=39.623899
    Hibernate: select d.distance from distance d where d.address1_GeoX=116.567751and d.address1_GeoY=39.832861and d.address2_GeoX=116.506056and d.address2_GeoY=39.623899
    Hibernate: select d.distance from distance d where d.address1_GeoX=116.567751and d.address1_GeoY=39.832861and d.address2_GeoX=116.506056and d.address2_GeoY=39.623899
    Hibernate: select d.distance from distance d where d.address1_GeoX=116.506056and d.address1_GeoY=39.623899and d.address2_GeoX=116.567751and d.address2_GeoY=39.832861
    Hibernate: select d.distance from distance d where d.address1_GeoX=116.506056and d.address1_GeoY=39.623899and d.address2_GeoX=116.567751and d.address2_GeoY=39.832861
    Hibernate: select d.distance from distance d where d.address1_GeoX=116.506056and d.address1_GeoY=39.623899and d.address2_GeoX=116.567751and d.address2_GeoY=39.832861
    Hibernate: select d.distance from distance d where d.address1_GeoX=116.567751and d.address1_GeoY=39.832861and d.address2_GeoX=116.672907and d.address2_GeoY=39.658568
    Hibernate: select d.distance from distance d where d.address1_GeoX=116.567751and d.address1_GeoY=39.832861and d.address2_GeoX=116.672907and d.address2_GeoY=39.658568
    Hibernate: select d.distance from distance d where d.address1_GeoX=116.567751and d.address1_GeoY=39.832861and d.address2_GeoX=116.672907and d.address2_GeoY=39.658568
    Hibernate: select d.distance from distance d where d.address1_GeoX=116.672907and d.address1_GeoY=39.658568and d.address2_GeoX=116.567751and d.address2_GeoY=39.832861
    Hibernate: select d.distance from distance d where d.address1_GeoX=116.672907and d.address1_GeoY=39.658568and d.address2_GeoX=116.567751and d.address2_GeoY=39.832861
    但是打印的sql可以清晰的看到他打印了不止1次。。
      

  6.   

    而且我这里是有配置缓存的,就算是第二次调用了该Service中的takeDistance()方法,他也是从缓存中拿走值,而不是再查一遍才对,请各位高人略施援手,不甚感激~
      

  7.   

    你敢再坑点么?就是误人子弟也不带这么误的啊!
    特么浏览器跟Hibernate有个毛线关系啊???
    浏览器发送两次请求,跟Hibernate打印两遍Sql语句,有半毛钱关联么?
      

  8.   


    Element element = cache.get(x1 + "," + y1 +","+ x2 +","+ y2);
    if (element != null) {
    dis = Double.parseDouble(element.getValue().toString());
    } else {
    // 数据库中查找
    dis = distanceDAO.getDistanceBy2Coordinate(x1, y1, x2, y2);楼主可以打印出这个看下element 。取得这个值一直是null
      

  9.   

    是否使用的是struts2,看下调用的action是不是以get开头的换个名字不要以get开头试试