1. 程式人生 > >在hibernate執行的SQL語句返回的list集合中的內容是Object[]物件,而不是entity物件

在hibernate執行的SQL語句返回的list集合中的內容是Object[]物件,而不是entity物件

現狀:在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();