当前位置: 代码迷 >> Sql Server >> 查不出来呀?该如何处理
  详细解决方案

查不出来呀?该如何处理

热度:96   发布时间:2016-04-24 10:32:50.0
查不出来呀??
 public MaterialCategory findByNames(final String[] singleRow, int j) {
        final StringBuilder hql = new StringBuilder();
        StringBuilder[] s = new StringBuilder[singleRow.length];
        String str = "t";
        s[0] = new StringBuilder("t");
        for (int i=1; i<j; i++) {
            str = str + ".parent";
            s[i] = new StringBuilder(str);
        }
        hql.append("from MaterialCategory t where 1=1");

        int i=0;
        while (j != 0) {
            hql.append(" and ");
            hql.append(s[j-1]).append(".name=").append(":name" + i);
            j--;
            i++;
        }
       
        return this.getHibernateTemplate().execute(new HibernateCallback<MaterialCategory>() {
            public MaterialCategory doInHibernate(Session session) throws HibernateException, SQLException {
                Query query =  session.createQuery(hql.toString());
                for(int i=0; i<singleRow.length-1; i++) {
                    query.setString("name" + i, singleRow[i]);
                }                    
                return (MaterialCategory) query.uniqueResult();
            }
        });
             
    }
比如就j= 3
最后拼的hql语句是 “from MaterialCategory t where 1=1 and t.parent.parent.name = singleRow[0] and  t.parent.name = singleRow[1]   and  t.name = singleRow[2] ”
------解决方案--------------------
T-SQL不支持:singleRow[0] and  t.parent.name = singleRow[1]   and  t.name = singleRow[2] ”这种写法,你在前端需要拼接好参数。至于怎么拼接,网上搜搜就有了
------解决方案--------------------
建议用SQL Profiler工具跟踪一下后台执行的SQL语句是否正确.
------解决方案--------------------
sql不支持这种写法 “from MaterialCategory t where 1=1 and t.parent.parent.name = singleRow[0] and  t.parent.name = singleRow[1]   and  t.name = singleRow[2] ”
  相关解决方案