ゆき
問題
nested exception is java.lang.NoClassDefFoundError: Could not initialize class
2019-03-21 15:35:43 |-ERROR [qtp1350559965-27] com.boxin.productions.sss.common.component.interceptor.ErrorControllerAdvice [45] -| null
java.lang.ClassCastException: com.boxin.productions.sss.common.jpa.service.impl.SysXLTransducerDataDto cannot be cast to java.util.Map
package com.boxin.productions.sss.common.jpa.service.impl;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import org.hibernate.SQLQuery;
import org.hibernate.Session;
import org.hibernate.transform.Transformers;
import org.springframework.stereotype.Service;
import com.boxin.productions.sss.common.util.UTil;
@Service
public class SysXLTransducerDataDao {
// 注入的實體管理器,執行持久化操作
@PersistenceContext
private EntityManager entityManager;
/**
* 車輛信息 - 車輛實時數據
* 檢索車輛的 溫度 與 位置 信息
*
* 數據表 : transducer_data_t
*
* @param vehicleRepertoryId 車輛編號
* @param vehicleRepertoryFlg 車輛或倉庫區分
* @param startTime 開始時間
* @param endTime 結束時間
* @param deleteFlg 數據存在 flg
* @param getTimeFlg 獲取時間區分 [ 0 : 當天 , 1 : 按輸入時間檢索]
* @param page 分頁-頁數
* @param size 分頁-每頁行數
* @param totalElementsTrue 分頁 limit
* @return
*/
@SuppressWarnings("unchecked")
public List<SysXLTransducerDataDto> getTemperatureGPSLocation(Integer vehicleRepertoryId, Integer vehicleRepertoryFlg, String startTime, String endTime, Integer deleteFlg, int getTimeFlg, int page, int size, boolean totalElementsTrue) {
StringBuffer stf = new StringBuffer();
stf.append(" SELECT data_gather_time as dataGatherTime, \n");
stf.append(" ROUND((data1+data2+data3)/num,2) AS avgData, \n");
stf.append(" data1,data2,data3,add1,add2 \n");
stf.append(" FROM ( \n");
stf.append(" SELECT a.data_gather_time, \n");
stf.append(" SUM(CASE WHEN a.datatype_dif = '1' THEN a.datatype_param1 ELSE 0 END) AS 'data1', \n");
stf.append(" SUM(CASE WHEN a.datatype_dif = '2' THEN a.datatype_param1 ELSE 0 END) AS 'data2', \n");
stf.append(" SUM(CASE WHEN a.datatype_dif = '3' THEN a.datatype_param1 ELSE 0 END) AS 'data3', \n");
stf.append(" SUM(CASE WHEN a.datatype_dif = '4' THEN a.datatype_param1 ELSE 0 END) AS 'add1', \n");
stf.append(" SUM(CASE WHEN a.datatype_dif = '4' THEN a.datatype_param2 ELSE 0 END) AS 'add2', \n");
stf.append(" SUM(CASE WHEN a.datatype_dif = '4' THEN 0 ELSE 1 END) as num \n");
stf.append(" FROM transducer_data_t a \n");
stf.append(" WHERE \n");
stf.append(" a.vehicle_repertory_id = '" + vehicleRepertoryId + "' AND \n");
stf.append(" a.vehicle_repertory_flg = '" + vehicleRepertoryFlg + "' AND \n");
// [ 0 : 當天 , 1 : 按輸入時間檢索]
if (getTimeFlg == 0) {
stf.append(" date_format( a.data_gather_time, '%Y-%m-%d' ) = date_format( now( ), '%Y-%m-%d' ) \n");
}
if (getTimeFlg == 1) {
stf.append(" date_format( a.data_gather_time, '%Y-%m-%d' ) >= date_format( '" + startTime + "', '%Y-%m-%d' ) AND \n");
stf.append(" date_format( a.data_gather_time, '%Y-%m-%d' ) <= date_format( '" + endTime + "', '%Y-%m-%d' ) \n");
}
stf.append(" AND \n");
stf.append(" a.deleteFlg = '0' \n");
stf.append(" GROUP BY a.data_gather_time \n");
if (getTimeFlg == 0) {
stf.append(" ORDER BY a.data_gather_time desc \n");
}
stf.append(" ) t \n");
// 分頁處理
if (totalElementsTrue == true) {
stf.append(" LIMIT " + page + "," + size + " \n");
}
// Hibernate 的 Session 獲取數據庫連接
Session session = entityManager.unwrap(org.hibernate.Session.class);
// 執行 sql 返回 SQLQuery 類型結果
SQLQuery query1 = session.createSQLQuery(stf.toString());
// 設置返回值類型 Transformers.aliasToBean 爲自定義寬鬆類型,無需屬性
query1.setResultTransformer(Transformers.aliasToBean(SysXLTransducerDataDto.class));
// 返回 List 結果
List<SysXLTransducerDataDto> list3 = query1.list();
// 判斷數據有無
if (UTil.isEmpty(list3)) {
return null;
} else {
return list3;
}
}
/**
* 車輛信息 - 查詢
*
* @param vehicleId 車輛ID
* @param vehicleRepertoryFlg 車輛 或 倉庫 區分
* @param vmDeleteFlg 數據存在區分
* @return
*/
@SuppressWarnings("unchecked")
public SysXLVehicleBroadTransducerContainerDto searchVehicle(String vehicleId, Integer vehicleRepertoryFlg,Integer vmDeleteFlg) {
StringBuffer stf = new StringBuffer();
stf.append(" SELECT \n");
// 車輛表
stf.append(" vm.vehicle_id as vehicleId \n");
stf.append(" ,vm.license_number as licenseNumber \n");
stf.append(" ,vm.net_weight as netWeight \n");
stf.append(" ,vm.driver_name as driverName \n");
stf.append(" ,vm.driver_phone as driverPhone \n");
stf.append(" ,vm.vehicle_length as vehicleLength \n");
stf.append(" ,vm.vehicle_width as vehicleWidth \n");
stf.append(" ,vm.vehicle_height as vehicleHeight \n");
stf.append(" ,vm.maximum_load as maximumLoad \n");
stf.append(" ,vm.seating_capacity as seatingCapacity \n");
stf.append(" ,vm.createTime as vmCreateTime \n");
stf.append(" ,vm.updateTime as vmUpdateTime \n");
stf.append(" ,vm.createUser as vmCreateUser \n");
stf.append(" ,vm.updateUser as vmUpdateUser \n");
stf.append(" ,vm.deleteFlg as vmDeleteFlg \n");
stf.append(" ,vm.lockVer as vmLockVer \n");
// 板表
stf.append(" ,bm.broad_id as bmBroadId \n");
stf.append(" ,bm.device_id as deviceId \n");
stf.append(" ,bm.broad_type as broadType \n");
stf.append(" ,bm.broad_container_id as broadContainerId \n");
stf.append(" ,bm.broad_container_def as broadContainerDef \n");
stf.append(" ,bm.createTime as bmCreateTime \n");
stf.append(" ,bm.updateTime as bmUpdateTime \n");
stf.append(" ,bm.createUser as bmCreateUser \n");
stf.append(" ,bm.updateUser as bmUpdateUser \n");
stf.append(" ,bm.deleteFlg as bmDeleteFlg \n");
stf.append(" ,bm.lockVer as bmLockVer \n");
// 傳感器表
stf.append(" ,tm.transducer_id as transducerId \n");
stf.append(" ,tm.transducer_name as transducerName \n");
stf.append(" ,tm.broad_id as tmBroadId \n");
stf.append(" ,tm.transducer_point as transducerPoint \n");
stf.append(" ,tm.createTime as tmCreateTime \n");
stf.append(" ,tm.updateTime as tmUpdateTime \n");
stf.append(" ,tm.createUser as tmCreateUser \n");
stf.append(" ,tm.updateUser as tmUpdateUser \n");
stf.append(" ,tm.deleteFlg as tmDeleteFlg \n");
stf.append(" ,tm.lockVer as tmLockVer \n");
// 橋連表
stf.append(" ,ct.container_broad_transducer_id as containerBroadTransducerId \n");
stf.append(" ,ct.vehicle_repertory_id as vehicleRepertoryId \n");
stf.append(" ,ct.vehicle_repertory_flg as vehicleRepertoryFlg \n");
stf.append(" ,ct.broad_id as ctBroadId \n");
stf.append(" ,ct.transducer_id as ctTransducerId \n");
stf.append(" ,ct.createTime as ctCreateTime \n");
stf.append(" ,ct.updateTime as ctUpdateTime \n");
stf.append(" ,ct.createUser as ctCreateUser \n");
stf.append(" ,ct.updateUser as ctUpdateUser \n");
stf.append(" ,ct.deleteflg as ctDeleteFlg \n");
stf.append(" ,ct.lockVer as ctLockVer \n");
stf.append(" FROM \n");
stf.append(" vehicle_m vm, \n");
stf.append(" broad_m bm, \n");
stf.append(" transducer_m tm, \n");
stf.append(" container_broad_transducer_t ct \n");
stf.append(" WHERE \n");
stf.append(" vm.vehicle_id = ct.vehicle_repertory_id \n");
stf.append(" AND \n");
stf.append(" bm.broad_id = ct.broad_id \n");
stf.append(" AND \n");
stf.append(" tm.transducer_id = ct.transducer_id \n");
stf.append(" AND \n");
stf.append(" vm.vehicle_id = '14' \n");
// Hibernate 的 Session 獲取數據庫連接
Session session = entityManager.unwrap(org.hibernate.Session.class);
// 執行 sql 返回 SQLQuery 類型結果
SQLQuery query1 = session.createSQLQuery(stf.toString());
// 設置返回值類型 Transformers.aliasToBean 爲自定義寬鬆類型,無需屬性
query1.setResultTransformer(Transformers.aliasToBean(SysXLVehicleBroadTransducerContainerDto.class));
/** 錯誤位置在此, 原因在於 */
// 返回 List 結果
List<SysXLVehicleBroadTransducerContainerDto> list3 = query1.list();
// 判斷數據有無
if (UTil.isEmpty(list3)) {
return null;
} else {
return list3.get(0);
}
}
}
package com.boxin.productions.sss.common.jpa.service.impl;
import java.util.Date;
public class SysXLTransducerDataDto {
// 傳感器數據編號
private Integer transducerDataId;
// 傳感器編號
private Integer transducerId;
// 車輛-or-倉庫編號
private Integer vehicleRepertoryId;
// 車輛或倉庫的區分 [暫 1:車 2:倉庫]
private Integer vehicleRepertoryFlg;
// 開發板編號
private Integer broadId;
// 數據類型區分
private Integer datatypeDif;
// 數據類型名稱
private String datatypeName;
// 數據採集時間
private Date dataGatherTime;
// 數據類型參數1
private String datatypeParam1;
// 數據類型參數2
private String datatypeParam2;
// 數據類型參數3
private String datatypeParam3;
// 數據類型參數4
private String datatypeParam4;
// 創建時間
private Date createTime;
// 更新時間
private Date updateTime;
// 創建者
private String createUser;
// 更新者
private String updateUser;
// 刪除標記
private Integer deleteFlg;
// 版本
private Integer lockVer;
// 車輛id
private Integer vehicleId;
// 數據表 flg
private Integer transducerDataFlg;
private double avgData;
private double data1;
private double data2;
private double data3;
private double add1;
private double add2;
public double getAvgData() {
return avgData;
}
public void setAvgData(double avgData) {
this.avgData = avgData;
}
public double getData1() {
return data1;
}
public void setData1(double data1) {
this.data1 = data1;
}
public double getData2() {
return data2;
}
public void setData2(double data2) {
this.data2 = data2;
}
public double getData3() {
return data3;
}
public void setData3(double data3) {
this.data3 = data3;
}
public double getAdd1() {
return add1;
}
public void setAdd1(double add1) {
this.add1 = add1;
}
public double getAdd2() {
return add2;
}
public void setAdd2(double add2) {
this.add2 = add2;
}
public Integer getTransducerDataFlg() {
return transducerDataFlg;
}
public void setTransducerDataFlg(Integer transducerDataFlg) {
this.transducerDataFlg = transducerDataFlg;
}
public Integer getTransducerDataId() {
return transducerDataId;
}
public void setTransducerDataId(Integer transducerDataId) {
this.transducerDataId = transducerDataId;
}
public Integer getTransducerId() {
return transducerId;
}
public void setTransducerId(Integer transducerId) {
this.transducerId = transducerId;
}
public Integer getVehicleRepertoryId() {
return vehicleRepertoryId;
}
public void setVehicleRepertoryId(Integer vehicleRepertoryId) {
this.vehicleRepertoryId = vehicleRepertoryId;
}
public Integer getVehicleRepertoryFlg() {
return vehicleRepertoryFlg;
}
public void setVehicleRepertoryFlg(Integer vehicleRepertoryFlg) {
this.vehicleRepertoryFlg = vehicleRepertoryFlg;
}
public Integer getBroadId() {
return broadId;
}
public void setBroadId(Integer broadId) {
this.broadId = broadId;
}
public Integer getDatatypeDif() {
return datatypeDif;
}
public void setDatatypeDif(Integer datatypeDif) {
this.datatypeDif = datatypeDif;
}
public String getDatatypeName() {
return datatypeName;
}
public void setDatatypeName(String datatypeName) {
this.datatypeName = datatypeName;
}
public Date getDataGatherTime() {
return dataGatherTime;
}
public void setDataGatherTime(Date dataGatherTime) {
this.dataGatherTime = dataGatherTime;
}
public String getDatatypeParam1() {
return datatypeParam1;
}
public void setDatatypeParam1(String datatypeParam1) {
this.datatypeParam1 = datatypeParam1;
}
public String getDatatypeParam2() {
return datatypeParam2;
}
public void setDatatypeParam2(String datatypeParam2) {
this.datatypeParam2 = datatypeParam2;
}
public String getDatatypeParam3() {
return datatypeParam3;
}
public void setDatatypeParam3(String datatypeParam3) {
this.datatypeParam3 = datatypeParam3;
}
public String getDatatypeParam4() {
return datatypeParam4;
}
public void setDatatypeParam4(String datatypeParam4) {
this.datatypeParam4 = datatypeParam4;
}
public Date getCreateTime() {
return createTime;
}
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
public Date getUpdateTime() {
return updateTime;
}
public void setUpdateTime(Date updateTime) {
this.updateTime = updateTime;
}
public String getCreateUser() {
return createUser;
}
public void setCreateUser(String createUser) {
this.createUser = createUser;
}
public String getUpdateUser() {
return updateUser;
}
public void setUpdateUser(String updateUser) {
this.updateUser = updateUser;
}
public Integer getDeleteFlg() {
return deleteFlg;
}
public void setDeleteFlg(Integer deleteFlg) {
this.deleteFlg = deleteFlg;
}
public Integer getLockVer() {
return lockVer;
}
public void setLockVer(Integer lockVer) {
this.lockVer = lockVer;
}
public Integer getVehicleId() {
return vehicleId;
}
public void setVehicleId(Integer vehicleId) {
this.vehicleId = vehicleId;
}
}
原因在於取出字段沒與 dto 對應上 .
但是程序報錯卻報的是 [ SysXLTransducerDataDto cannot be cast to java.util.Map ] 這個讓人困惑的類型轉換錯誤, 嗯 ,給自己長點記性.