hibernate5 報錯com.microsoft.sqlserver.jdbc.SQLServerException: 列名 XX 無效。

今天使用hibernateTemplate.executeWithNativeSession執行sql查詢語句把結果轉換成實體時候,發現除了第一頁請求查詢正常,請求其他頁面時候報錯com.microsoft.sqlserver.jdbc.SQLServerException: 列名 id 無效

1 錯誤描述:

這裏寫圖片描述

這裏寫圖片描述

這裏寫圖片描述

2 報錯出現場景:

使用hibernateTemplate.executeWithNativeSession執行sql查詢語句把結果轉換成實體時候

List<BbsTopicInfo> list = hibernateTemplate.executeWithNativeSession(
    new HibernateCallback<List<BbsTopicInfo>>() {
        @Override
        public List<BbsTopicInfo> doInHibernate(Session session) throws HibernateException {
            SQLQuery sqlQuery = session.createSQLQuery(sql);  
            // 添加要查詢字段   數據庫字段和實體類字段對應起來  
            AddScalar.addSclar(sqlQuery, BbsTopicInfo.class);  
            // 把結果轉換成實體
            sqlQuery.setResultTransformer(Transformers.aliasToBean(BbsTopicInfo.class));  
            sqlQuery.setFirstResult(firstResult);  
            sqlQuery.setMaxResults(pageSize);  
            return sqlQuery.list();  
        }
    });

3 分析可能原因: 根本原因是結果集中找不到與實體類屬性名稱id的列

3.1 可能實體類有id屬性,但查詢結果中沒有id屬性;
此時去掉實體類中多餘的屬性即可

3.2可能實體類有id屬性,但hibernate把查詢結果把id屬性名稱解析爲其他名稱,如page0_;
測此時給查詢語句每列加AS改變列名,列名與實體類屬性一樣

sql部分語句:
這裏寫圖片描述

hibernate打印sql語句
這裏寫圖片描述

修改後的sql語句,加了AS屬性
這裏寫圖片描述

hibernate最終打印 sql語句
這裏寫圖片描述

4 結論:

使用hibernateTemplate.executeWithNativeSession執行sql查詢語句把結果轉換成實體時候,要確保屬性個數和名稱,與查詢語句的列一模一樣對應。

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