hql 语句添加case when 疑惑

lihan6839 2017-06-16 03:41:22
可以生成sql 语句,在数据库中查询也没问题,但是会报错,不知道是不是类型转换错误,我是新手,希望大佬们帮我看下。

private String createQueryString(boolean useCount,
Map<StationMonitorVolFieldsDB, String> criterias) {
// TODO Auto-generated method stub
StringBuilder sb = new StringBuilder();
int termCount = 0;
sb.append("select").append(useCount ? " count(t.id)" : " t ,case Data_Valid when '1' then '有效' when '2' then '无效' else '' end ")
.append(" from StationMonitorVolInfo as t");
return sb.toString();




下面报错信息,

Hibernate: select top 20 stationmon0_.ID as col_0_0_, case Data_Valid when '1' then '有效' when '2' then '无效' else '' end as col_1_0_, stationmon0_.ID as ID21_, stationmon0_.SERIALPORTEQUIID as SERIALPO2_21_, stationmon0_.dataType as dataType21_, stationmon0_.vol_data as vol4_21_, stationmon0_.data_valid as data5_21_, stationmon0_.updatetime as updatetime21_ from TSTATIONMONITORCIRCLE_VOL stationmon0_ where stationmon0_.SERIALPORTEQUIID='959' and (stationmon0_.dataType like '%V%')
ParamExceptionMappingInterceptor: java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to dwz.persistence.beans.StationMonitorVolInfo:[Ljava.lang.Object; cannot be cast to dwz.persistence.beans.StationMonitorVolInfo
java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to dwz.persistence.beans.StationMonitorVolInfo
...全文
327 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
lihan6839 2017-06-16
  • 打赏
  • 举报
回复
引用 3 楼 pany1209 的回复:
[quote=引用 2 楼 lihan6839 的回复:] [quote=引用 1 楼 pany1209 的回复:] java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to dwz.persistence.beans.StationMonitorVolInfo.... 类转换错误。。。。报错是在哪一行???
for循环这一行


@Override
	public Collection<StationMonitorVol> searchStationMonitorVolFromDB(
			Map<StationMonitorVolFieldsDB, String> criterias,
			String orderField, int startIndex, int count) {
		// TODO Auto-generated method stub
		ArrayList<StationMonitorVol> stationmonitorvolList = new ArrayList<StationMonitorVol>();
		if (criterias == null)
			
			return stationmonitorvolList;

		Collection<StationMonitorVolInfo> InstationmonitorvolList = this.stationmonitorvoldao.findByQuery(this
				.createQueryString(false, criterias), startIndex, count);

		if (InstationmonitorvolList == null || InstationmonitorvolList.size() == 0)
			return stationmonitorvolList;

		for (StationMonitorVolInfo Ins: InstationmonitorvolList) {
			stationmonitorvolList.add(new StationMonitorVolImpl(Ins));
		}
		//System.out.println(stationBaseList);
		return stationmonitorvolList;
	}
下面是

package dwz.persistence.beans;

import java.math.BigDecimal;
import java.sql.Date;

public class StationMonitorVolInfo {

	private Integer ID;
	private Integer SERIALPORTEQUIID;
	private String dataType;
	private BigDecimal vol_data;
	private Integer data_valid;
	private Date updatetime;


	public Integer getID() {
		return ID;
	}

	public void setID(Integer ID) {
		this.ID = ID;
	}

	public Integer getSERIALPORTEQUIID() {
		return SERIALPORTEQUIID;
	}

	public void setSERIALPORTEQUIID(Integer SERIALPORTEQUIID) {
		this.SERIALPORTEQUIID = SERIALPORTEQUIID;
	}

	public String getDataType() {
		return dataType;
	}

	public void setDataType(String dataType) {
		this.dataType = dataType;
	}

	public BigDecimal getVol_data() {
		return vol_data;
	}

	public void setVol_data(BigDecimal vol_data) {
		this.vol_data = vol_data;
	}

	public Integer getData_valid() {
		return data_valid;
	}

	public void setData_valid(Integer data_valid) {
		this.data_valid = data_valid;
	}

	public Date getUpdatetime() {
		return updatetime;
	}

	public void setUpdatetime(Date updatetime) {
		this.updatetime = updatetime;
	}
}

[/quote] this.stationmonitorvoldao.findByQuery(this.createQueryString(false, criterias), startIndex, count); .findByQuery方法怎么写的???[/quote]
package dwz.dal;

import java.util.Collection;
import java.util.List;

import dwz.persistence.beans.StationBaseInfo;

public interface BaseDao<T, PK extends java.io.Serializable> {

	public void insert(T model);
	
	public void insertBatch(List<T> modelList);

	public void update(T model);

	public void delete(T model);

	public T findByPrimaryKey(PK modelPK) throws LookupException;

	public java.util.Collection<T> findAll();


	
	@SuppressWarnings("unchecked")
	public java.util.Collection findByAdvancedQuery(final String queryStr,
			final int startIndex, final int count);
	
	public java.util.Collection<T> findByQuery(final String queryStr,
			final int startIndex, final int count);

	public int countAll();
	
	public int countByQuery(final String queryStr);
	
	public int countByQuery(final String queryStr, final Object[] params);
	
	public void callProcedure(String procedure);
	
	public java.util.Collection findBySQLQuery(final String queryStr,
			final Object[] params, final int startIndex, final int count);

	public int countBySQLQuery(final String queryStr, final Object[] params);
	

}
李德胜1995 2017-06-16
  • 打赏
  • 举报
回复
引用 2 楼 lihan6839 的回复:
[quote=引用 1 楼 pany1209 的回复:] java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to dwz.persistence.beans.StationMonitorVolInfo.... 类转换错误。。。。报错是在哪一行???
for循环这一行


@Override
	public Collection<StationMonitorVol> searchStationMonitorVolFromDB(
			Map<StationMonitorVolFieldsDB, String> criterias,
			String orderField, int startIndex, int count) {
		// TODO Auto-generated method stub
		ArrayList<StationMonitorVol> stationmonitorvolList = new ArrayList<StationMonitorVol>();
		if (criterias == null)
			
			return stationmonitorvolList;

		Collection<StationMonitorVolInfo> InstationmonitorvolList = this.stationmonitorvoldao.findByQuery(this
				.createQueryString(false, criterias), startIndex, count);

		if (InstationmonitorvolList == null || InstationmonitorvolList.size() == 0)
			return stationmonitorvolList;

		for (StationMonitorVolInfo Ins: InstationmonitorvolList) {
			stationmonitorvolList.add(new StationMonitorVolImpl(Ins));
		}
		//System.out.println(stationBaseList);
		return stationmonitorvolList;
	}
下面是

package dwz.persistence.beans;

import java.math.BigDecimal;
import java.sql.Date;

public class StationMonitorVolInfo {

	private Integer ID;
	private Integer SERIALPORTEQUIID;
	private String dataType;
	private BigDecimal vol_data;
	private Integer data_valid;
	private Date updatetime;


	public Integer getID() {
		return ID;
	}

	public void setID(Integer ID) {
		this.ID = ID;
	}

	public Integer getSERIALPORTEQUIID() {
		return SERIALPORTEQUIID;
	}

	public void setSERIALPORTEQUIID(Integer SERIALPORTEQUIID) {
		this.SERIALPORTEQUIID = SERIALPORTEQUIID;
	}

	public String getDataType() {
		return dataType;
	}

	public void setDataType(String dataType) {
		this.dataType = dataType;
	}

	public BigDecimal getVol_data() {
		return vol_data;
	}

	public void setVol_data(BigDecimal vol_data) {
		this.vol_data = vol_data;
	}

	public Integer getData_valid() {
		return data_valid;
	}

	public void setData_valid(Integer data_valid) {
		this.data_valid = data_valid;
	}

	public Date getUpdatetime() {
		return updatetime;
	}

	public void setUpdatetime(Date updatetime) {
		this.updatetime = updatetime;
	}
}

[/quote] this.stationmonitorvoldao.findByQuery(this.createQueryString(false, criterias), startIndex, count); .findByQuery方法怎么写的???
lihan6839 2017-06-16
  • 打赏
  • 举报
回复
引用 1 楼 pany1209 的回复:
java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to dwz.persistence.beans.StationMonitorVolInfo.... 类转换错误。。。。报错是在哪一行???
for循环这一行


@Override
	public Collection<StationMonitorVol> searchStationMonitorVolFromDB(
			Map<StationMonitorVolFieldsDB, String> criterias,
			String orderField, int startIndex, int count) {
		// TODO Auto-generated method stub
		ArrayList<StationMonitorVol> stationmonitorvolList = new ArrayList<StationMonitorVol>();
		if (criterias == null)
			
			return stationmonitorvolList;

		Collection<StationMonitorVolInfo> InstationmonitorvolList = this.stationmonitorvoldao.findByQuery(this
				.createQueryString(false, criterias), startIndex, count);

		if (InstationmonitorvolList == null || InstationmonitorvolList.size() == 0)
			return stationmonitorvolList;

		for (StationMonitorVolInfo Ins: InstationmonitorvolList) {
			stationmonitorvolList.add(new StationMonitorVolImpl(Ins));
		}
		//System.out.println(stationBaseList);
		return stationmonitorvolList;
	}
下面是

package dwz.persistence.beans;

import java.math.BigDecimal;
import java.sql.Date;

public class StationMonitorVolInfo {

	private Integer ID;
	private Integer SERIALPORTEQUIID;
	private String dataType;
	private BigDecimal vol_data;
	private Integer data_valid;
	private Date updatetime;


	public Integer getID() {
		return ID;
	}

	public void setID(Integer ID) {
		this.ID = ID;
	}

	public Integer getSERIALPORTEQUIID() {
		return SERIALPORTEQUIID;
	}

	public void setSERIALPORTEQUIID(Integer SERIALPORTEQUIID) {
		this.SERIALPORTEQUIID = SERIALPORTEQUIID;
	}

	public String getDataType() {
		return dataType;
	}

	public void setDataType(String dataType) {
		this.dataType = dataType;
	}

	public BigDecimal getVol_data() {
		return vol_data;
	}

	public void setVol_data(BigDecimal vol_data) {
		this.vol_data = vol_data;
	}

	public Integer getData_valid() {
		return data_valid;
	}

	public void setData_valid(Integer data_valid) {
		this.data_valid = data_valid;
	}

	public Date getUpdatetime() {
		return updatetime;
	}

	public void setUpdatetime(Date updatetime) {
		this.updatetime = updatetime;
	}
}

李德胜1995 2017-06-16
  • 打赏
  • 举报
回复
java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to dwz.persistence.beans.StationMonitorVolInfo.... 类转换错误。。。。报错是在哪一行???

67,550

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧