HQL中select new com.clsss 報錯 could not instantiate class from tuple

前言

最近上線了一個工具,上完之後測試驗證居然報錯,明明自測過的,哎,菜啊。。。。看下問題。主要報錯關鍵點如下

org.springframework.orm.hibernate4.HibernateQueryException: could not instantiate class
 [xxx] from tuple; nested exception is org.hibernate.QueryException: could not 
instantiate class [xxx] from tuple

犯罪現場

我們先看看導致報錯的代碼吧,其實很簡單的東西

String hql = "select new TempOrderInfoDTO(o.id,o.orderForm,o.type) from FoodOrderInfo o where o.id=?";
TempOrderInfoDTO tempOrderInfoDTO = orderService.findSingle(hql, new Object[] {orderId});
return tempOrderInfoDTO;

就是這麼個簡單東西,由於比較的簡單小工具,測試就沒參與了,自測了下,沒問題就上線了。卻報上面錯,原來是沒考慮到type爲空的場景。算了還是老實點吧,改下代碼

String hql = "from FoodOrderInfo  o where o.id=?";
FoodOrderInfo foodOrderInfo = orderService.findSingle(hql, new Object[] {orderId});
TempOrderInfoDTO tempOrderInfoDTO = new TempOrderInfoDTO();
if (foodOrderInfo != null) {
    tempOrderInfoDTO.setId(foodOrderInfo.getId());
    tempOrderInfoDTO.setOrderFrom(foodOrderInfo.getOrderFrom());
    tempOrderInfoDTO.setType(foodOrderInfo.getType());
}
 return tempOrderInfoDTO;

哎,菜是原罪。

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