代码:
根据用户ID显示其下级用户 public List nextLevelUserid(String userid) {
Session session = HibernateSessionFactory.getSession();
List relist = null;
try { Query queryObject = session
.createSQLQuery("select userid, case when level=1 and parentuserid='0' then 1 when level=1 and parentuserid<>'0' then 2 when level=2 and prior parentuserid='0' then 2 when level=2 and prior parentuserid<>'0' then 3  else 3 end as uidlevel from userinfo  where level>1 start with userid= :uid connect by prior userid = parentuserid ; ");
queryObject.setParameter("uid", userid);
relist = queryObject.list();
} catch (RuntimeException re) {
log.error("==CardinfoServices findAllCardinfo failed==", re);
re.printStackTrace();
} finally {
session.close();
}
return relist;
}
但是如果我把sql写成这样,就没有问题
但是写成这样不符合我现在的需求
select userid, case when level=2 then 2 else 3 end as uidlevel from userinfo where level>1 start with userid= :uid connect by prior userid = parentuserid请问该如何修改?

解决方案 »

  1.   

    select userid, case when level=1 and parentuserid='0' then 1 when level=1 and parentuserid<>'0' then 2 when level=2 and prior parentuserid='0' then 2 when level=2 and prior parentuserid<>'0' then 3  else 3 end as uidlevel from userinfo  where level>1 start with userid= :uid connect by prior userid = parentuserid ; 
    这条sql 在客户端能执行吗?末尾为什么带个分号,莫非和mysql一样分号代码一条语句结束?
    是在不行 就查询出结果来 在if else 判断uidlevel的值也可以啊 就封装在vo的get方法里
      

  2.   

    我的是oracle,不知道改了什么地方,就好了好有个问题请教下,其中uidlevel  的返回类型是什么?
    我写的string,long 都报转换错误?
      

  3.   


    我定义uidlevel为Integer类型,可是程序报错
    java.lang.ClassCastException: java.math.BigDecimal最后换成BigDecimal就好了