现状:在entity类中存在数据库表不存在的字段,这些字段只是做展示,不做在数据库表中进行保存。但是在sql语句查询的时候,出现了:返回的list集合中的内容是Object[]对象,而不是entity对象
代码:pojo代码:
// 主键
private String id;
// 正确数量
private Integer rightnum;
// 酒吧id
private String barid;
// 场次id
private String periodid;
// 轮次状态
private String periodstate;
// 场次状态
private String resultstate;
// 时间设置
private Integer time;
// 分组内容id
private Integer playguessid;
// 游戏开始时间
private Date startdate;
// 游戏结束时间
private Date enddate;
// 显示内容
private String content;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public Integer getRightnum() {
return rightnum;
}
public void setRightnum(Integer rightnum) {
this.rightnum = rightnum;
}
public String getBarid() {
return barid;
}
public void setBarid(String barid) {
this.barid = barid;
}
public Integer getTime() {
return time;
}
public void setTime(Integer time) {
this.time = time;
}
public Integer getPlayguessid() {
return playguessid;
}
public void setPlayguessid(Integer playguessid) {
this.playguessid = playguessid;
}
public Date getStartdate() {
return startdate;
}
public void setStartdate(Date startdate) {
this.startdate = startdate;
}
public Date getEnddate() {
return enddate;
}
public void setEnddate(Date enddate) {
this.enddate = enddate;
}
public String getPeriodstate() {
return periodstate;
}
public void setPeriodstate(String periodstate) {
this.periodstate = periodstate;
}
public String getResultstate() {
return resultstate;
}
public void setResultstate(String resultstate) {
this.resultstate = resultstate;
}
public String getPeriodid() {
return periodid;
}
public void setPeriodid(String periodid) {
this.periodid = periodid;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
dao类:
String sql="select * from playguessresult WHERE barid=? and resultstate='2' and periodid=? order by startdate asc ";
return getCurrentSession().createSQLQuery(sql).setString(0, barid).setString(1, periodid).setFirstResult(0).setMaxResults(8).list();
数据库表创建语句:
CREATE TABLE `playguessresult` (
`id` varchar(50) DEFAULT NULL COMMENT '主键',
`rightnum` int(10) DEFAULT NULL COMMENT '正确数量',
`barid` varchar(40) DEFAULT NULL COMMENT '酒吧id',
`time` int(10) DEFAULT '120' COMMENT '时间设置',
`playguessid` int(10) DEFAULT NULL COMMENT '分组内容id',
`periodstate` varchar(10) DEFAULT NULL COMMENT '轮次状态',
`startdate` datetime DEFAULT NULL COMMENT '游戏开始时间',
`enddate` datetime DEFAULT NULL COMMENT '游戏结束时间',
`resultstate` varchar(10) DEFAULT NULL COMMENT '场次状态',
`periodid` varchar(50) DEFAULT NULL COMMENT '场次id'
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
调用DAO的方法获取list集合,使用list.get(i)获取list集合中的对象时候,出现异常: java.lang.ClassCastException:Ljava.lang.Object; cannot be cast to net.yjiasoft.sss.table.AccountInfo
原因分析:
由于sql语句中字段信息是在entity中存在的,但是在entity类中存在有数据库表字段不存在的属性。那么在转化的时候不能自动的转化为bean对象,因此出现了在转为list集合对象,list存放的是Object[]对象。
解决方式:
在dao的方法中,使用addEntity(xx.class)来进行强制转化为bean对象,如:
getCurrentSession().createSQLQuery(sql).addEntity(AccountInfo.class).setString(0, barid).setString(1, periodid).setFirstResult(0).setMaxResults(8).list();