我从一张表之中查3个字段
查完之后这3个字段组合为一个对象
现在想查询这个对象的list,该如何做呢? public List<NormalKaoQin> getNormalKaoQinList() {
Session s = this.getSession();
List list = s.createSQLQuery("select cio1.userid,cio1.checktime,cio2.checktime " +
"from checkinout cio1,checkinout cio2 " +
"where cio1.userid = cio2.userid " +
"and cio1.checktype='I' " +
"and cio2.checktype='O' " +
"and year(cio1.checktime) = year(cio2.checktime) " +
"and month(cio1.checktime) = month(cio2.checktime) " +
"and day(cio1.checktime) = day(cio2.checktime);").addEntity(NormalKaoQin.class).list();
return list;
}

解决方案 »

  1.   

    没看明白你的表达
    cio1.userid,
    cio1.checktime,
    cio2.checktime
    这3个字段组合后查list 能把效果和例子说明下吗?
      

  2.   

    本身我这里是一张考勤的数据表
    其中的checktime为签到时间,签退时间
    用一个checktype的状态属性来标识,I为签到,O为签退。我查询完之后,需要给客户展示的是:
    员工  当天签到时间  当天签退时间但是我用hibernate查完之后,新建了一个entity,里面就这3个属性,想产生关联。不知道该如何做
      

  3.   

    和数据库中的考勤表一致的entity:package com.zndt.znfw.entity;public class Checkinout {
    private CheckinoutPK pk;
    private String checktype;
    private Integer verifycode;
    private String sensorid; public String getChecktype() {
    return checktype;
    } public void setChecktype(String checktype) {
    this.checktype = checktype;
    } public Integer getVerifycode() {
    return verifycode;
    } public void setVerifycode(Integer verifycode) {
    this.verifycode = verifycode;
    } public String getSensorid() {
    return sensorid;
    } public void setSensorid(String sensorid) {
    this.sensorid = sensorid;
    } public CheckinoutPK getPk() {
    return pk;
    } public void setPk(CheckinoutPK pk) {
    this.pk = pk;
    }
    }
    查询完后需要的entity:package com.zndt.znfw.entity;import java.util.Date;public class NormalKaoQin {
    private Integer id;
    private Date comeTime;
    private Date backTime;
    public Integer getId() {
    return id;
    }
    public void setId(Integer id) {
    this.id = id;
    }
    public Date getComeTime() {
    return comeTime;
    }
    public void setComeTime(Date comeTime) {
    this.comeTime = comeTime;
    }
    public Date getBackTime() {
    return backTime;
    }
    public void setBackTime(Date backTime) {
    this.backTime = backTime;
    }
    }
      

  4.   

    你这样查询出来的list对象是一个里面的元素是Object[]!
    要查看里面的元素、得转换成Object[]!
    for(int i = 0 ; i < list.size(); i ++){
        /*
         * 数组元素顺序跟sql中字段的顺序一致、从0开始
         */
        Object[] objarr = (Object[])list.get(i);
        System.out.println(objarr[0]);  //cio1.userid
        System.out.println(objarr[1]);  //cio1.checktime
        System.out.println(objarr[2]);  //cio2.checktime
    }
      

  5.   


    junit测试下,打印结果咋是这样的呢?
    //output:
    1
    2012-11-12 09:08:22.0
    2012-11-12 09:08:22.0
      

  6.   

    你最好理下你的逻辑啊sql执行是对的 单元测试是错的 可以检查下代码?
      

  7.   


    给两个checktime字段分别加上不同的别名试试
      

  8.   

    cio1.checktime
    cio2.checktime
    前面的cio1跟cio2不区分的、显示的时候取的是checktime
    你看看你在数据查询显示出来的字段名字就知道了!
    而程序在获取字段信息的时候、也是根据key值这样映射的!
    rs.getString("checktime")它总是按照顺序找相近的字段然后按照rs给的行号信息给值返回给你!只有像 count、max、age使用这样的函数他的字段名称才是全名、如 count(name)如果你不给一个别名、那么程序也得rs.getInt("count(name)")这样!只是这些get取值部分Hibernate封装了!