在hibernate執行的SQL語句返回的list集合中的內容是Object[]物件,而不是entity物件
阿新 • • 發佈:2018-11-10
現狀:在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();