public List<Personinfo> findAllInfoByRootId(String cid, String rootId) {
// TODO Auto-generated method stub
System.out.println(cid+""+rootId);
List<Personinfo> perList = new ArrayList<Personinfo>();
SessionFactory fac = HibernateSessionFactory.getSessionFactory();
Session session = fac.openSession();
String hql = "select * from Personinfo o where o.pid =? and o.rootId=?";
// String hql = "select * from Personinfo o where o.pid ='"+cid+"' and o.rootId='"+rootId+"'";
SQLQuery cri = session.createSQLQuery(hql).addEntity(Personinfo.class);
cri.setString(0, cid);
cri.setString(1, rootId);
perList = (List<Personinfo>)cri.list();
if(perList==null){
return null;
}
for (int i = 0; i < perList.size(); i++) {
Personinfo p = perList.get(i);
List<Personinfo> children = findAllInfoByRootId(p.getCid(),rootId);
p.setChildren(new HashSet<Personinfo>(children));
}
return perList;
}这个是我的方法,现在问题是我用sqlquery如果where(cid,rootId)条件有中文或者英文的话就报错,如果是数字就没问题,数据库的字段都是varchar2()的(oracle数据库),我拼接sql和注入参数都试了,求教了.

解决方案 »

  1.   

    各位大侠们,我在线等啊。
    它的sql打印出来了,我把sql放到数据库执行没问题,可以查询出数据
    只是它报错的信息为:
    java.sql.SQLException: 无法转换为内部表示
      

  2.   

    查看
    Personinfo
    hbm.xml 
    类型是否匹配
      

  3.   

    不配置也可以啊,如果pid='001001002'之类的就可以,如果是pid='dfddfd'或者是中文就不行,就会报上面的错
      

  4.   

     SQLQuery cri = session.createSQLQuery(hql).addEntity(Personinfo.class);我都不知道你这条语句是怎么回事啊??为什么要加上这个啊.addEntity(Personinfo.class)????
      

  5.   

    if(perList==null){
                return null;
            }
    这个判断最好写成if(perList.isEmpty()){
                return null;
            }
      

  6.   

    addEntity(Personinfo.class)不加这个它返回Object对象啊?