Hibernate + mysql 查询伪劣时:= 出现 Space is not allowed after parameter prefix ':' MySQL异常

需求: 要求查询一个站点在地市和省的排名信息出来。

效果图:

代码实现: 注释的部分是起初采用的hibernate 查询,但无论怎么写都会报 space is not allowed after parameter prefix ':'......  后来上网查了,有人也遇到过类似问题,给出的解决方法是转义冒号。 http://blog.csdn.net/woshizhangliang999/article/details/48036407  但是在不知道为何在我里不起作用。 可能是我程序限制??反正不太清楚。 后来没办法采用了原始的JDBC 查询。 在此记录一下。 代码如下。

@Autowired
private JdbcTemplate jdbcTemplateLoms;
public List getStationGameSalesRank(String regionCode) {
        
        StringBuffer sb = new StringBuffer();
        sb.append("select @curRank:=@curRank+1 AS rank, sales.* from (SELECT s.station_id stationId, sum(s.this_year_sale) sales_sum FROM station_game_sales_shanxi s ");
        
//        String sql = "select @curRank \:=@curRank+1 AS rank, sales.* from ( "+
//                     "SELECT s.station_id stationId, sum(s.this_year_sale) sales_sum FROM station_game_sales_shanxi s ";
//                    
        if (regionCode != null && !"".equals(regionCode)
                && !"0".equals(regionCode)) {
            sb.append("LEFT JOIN station sta on s.station_id = sta.station_id ");
            sb.append("Where sta.region_code ='"+regionCode+"' ");
        }
        sb.append("GROUP BY s.station_id ORDER BY sales_sum DESC ) sales, (SELECT @curRank:=0) q ");
        List list = null;
        try{
            list = jdbcTemplateLoms.queryForList(sb.toString());
//            Session session = (Session) em.getDelegate();
//            SQLQuery query = session.createSQLQuery(sql);
//            if (regionCode != null && !"".equals(regionCode)
//                    && !"0".equals(regionCode)) {
//                query.setParameter("regionCode", regionCode.trim());
//            }
//            query.setResultTransformer(CriteriaSpecification.ALIAS_TO_ENTITY_MAP);
//            list = query.list();
        }catch(Exception ex){
            ex.printStackTrace();
        }
        return list;
    }
原文地址:https://www.cnblogs.com/zyfxlv/p/8026931.html