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
...全文
367 4 打赏 收藏 转发到动态 举报
写回复
用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.... 类转换错误。。。。报错是在哪一行???
代码下载地址: https://pan.quark.cn/s/a4b39357ea24 在Android系统上达成蓝牙与便携式打印机的连接,通常包含了一系列技术要素和操作流程。名为"Android连接蓝牙打印机(cpcl指令)Demo完整版"的项目提供了一个全面的解决方案,它运用了专门的打印机指令集——CPCL(Control Program for ClearType Language),该指令集主要用于操控打印作业,尤其适用于标签和面单的打印。以下是关于此主题的详尽阐述: 1. **蓝牙传输打印**:Android平台内置了`BluetoothAdapter`类别用于管理蓝牙数据交互。必须确认设备已启用蓝牙功能,随后对邻近的蓝牙设备进行探测。`startDiscovery()`函数负责启动搜寻过程,而`getBondedDevices()`能够列出已建立配对的设备。 2. **建立与便携打印机的联系**:当识别出目标打印机后,可借助`BluetoothDevice`类中的`createRfcommSocketToServiceRecord()`函数构建RFCOMM(蓝牙串行端口协议)的通道。一旦连接建立成功,便可通过`connect()`函数与打印机展开信息交流。 3. **CPCL编码**:CPCL是一种与ESC/POS类似的页面描述性语言,它用于调控打印机的输出格式、文字样式、条形码等。比如,`^PJL`用于设定页面布局,`^FO`指定输出位置,`^A`设定字体尺寸,`^BC`生成条形码,`^PG`执行分页操作。在Android程序中,需将CPCL编码转为文本格式,再经由蓝牙通道传输至打印机。 4. **博思达软件开发工具包**:博思达作为一家著名的打印...

67,535

社区成员

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

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