Cardinfo.java [POJO]private Long cardid; private Userinfo userinfo; private Cardownerinfo cardownerinfo; private String cardname; private String phonenum; private String cardstate; private Date regdate; private Long addons; private String otherinfo;
hql:

sb
.append("select new com.telezone.hqllist.CardinfoList( cinfo.cardid  ,cinfo.cardname  , oinfo.ownername   ,uinfo.username , cinfo.phonenum,cinfo.cardstate,cinfo.regdate,cinfo.otherinfo ) from Cardinfo as cinfo left  join cinfo.cardownerinfo as oinfo left join cinfo.userinfo as uinfo");
queryObject = session.createQuery(sb.toString());
其中com.telezone.hqllist下放的都是多表查询时,需要返回的字段,一个多表查询对应一个类
这样的类应该是属于JavaBean而不是POJO对象吧?请问大家是如何处理这样的查询的?
应该这样返回的List,在Struts里面可以直接使用,不需要转换,就可以传到页面上了

解决方案 »

  1.   

    1、 对各个字段分别转化成对应类型,如下:Query q = session.createQuery(" select members, classInfo.className " +           " from Members members, ClassInfo classInfo " +           " where members.level = classInfo.classCode ");          List result = q.list();       Iterator it = result.iterator();       while (it.hasNext()) {          Object[] tuple = (Object[]) it.next();          Members members = (Members) tuple[ 0 ];          String className = (String) tuple[ 1 ];       }  
    这时,List的每一属性都是一个对象,通过 Members members = (Members) tuple[ 0 ]转换类型。2、构造自己的复合类型,如下:
    Query q = session.createQuery(" select new NewMembers(members, classInfo.className) " +           " from Members members, ClassInfo classInfo " +           " where members.level = classInfo.classCode "); 这是需要相应的NewMembers类和构造方法。
      

  2.   

    不知道是CSDN的还是我网速的原因,没有提示发送成功,
    而是报错了错误