2019/03/21

ゆき

問題

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 ] 這個讓人困惑的類型轉換錯誤, 嗯 ,給自己長點記性.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章