乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      hibernate原生sql封裝,報(bào)錯(cuò)信息:could not find setter for rownum

       瀚海璨夜 2019-01-16
      報(bào)錯(cuò)信息:could not find setter for rownum_

      還原現(xiàn)場:在mysql環(huán)境下,以下代碼,在mysql下運(yùn)行正常,但是切換到oralce,報(bào)出找不到STUDENTNAME屬性的錯(cuò)誤。
      Sql代碼  收藏代碼
      1. List resultWithAliasedBean = s.createSQLQuery(  
      2.   "SELECT st.name as studentName, co.description as courseDescription " +  
      3.   "FROM Enrolment e " +  
      4.   "INNER JOIN Student st on e.studentId=st.studentId " +  
      5.   "INNER JOIN Course co on e.courseCode=co.courseCode")  
      6.   .setResultTransformer( Transformers.aliasToBean(StudentDTO.class))  
      7.   .list();  


      分析:原來是oracle自動將列映射的studentName轉(zhuǎn)換為大寫的STUDENTNAME,所以不能映射,報(bào)類找不到STUDENTNAME的set方法。
      解決辦法:添加addScalar方法,代碼如下:

      Sql代碼  收藏代碼
      1. List resultWithAliasedBean = s.createSQLQuery(  
      2.   "SELECT st.name as studentName, co.description as courseDescription " +  
      3.   "FROM Enrolment e " +  
      4.   "INNER JOIN Student st on e.studentId=st.studentId " +  
      5.   "INNER JOIN Course co on e.courseCode=co.courseCode")  
      6.   .addScalar("studentName")  
      7.   .addScalar("courseDescription")  
      8.   .setResultTransformer( Transformers.aliasToBean(StudentDTO.class))  
      9.   .list();  


      Tip: the addScalar() calls were required on HSQLDB to make it match a property name since it returns column names in all uppercase (e.g. "STUDENTNAME"). This could also be solved with a custom transformer that search the property names instead of using exact match - maybe we should provide a fuzzyAliasToBean() method ;

      還有一種方式解決,就是使用雙引號將別名包裹起來,感覺不是很優(yōu)雅。像這樣
      Sql代碼  收藏代碼
      1. String sql = "select id as \"id\",iata as \"iata\",flight as \"flight\",dest as \"dest\",domint as \"domint\" " +   
      2.             " ,sdt as \"sdt\",task_nature as \"taskNature\",est_date as \"estDate\",act_date as \"actDate\",remark as \"remark\" " +   
      3.             " from FIDS_DEPF";  



      createSQLQuery  setFirstResult設(shè)置起始記錄,setMaxResult設(shè)置結(jié)束記錄 sql里有用分組函數(shù),返回非持久化對象  當(dāng)firstResult=0,正常,當(dāng)firstResult>0時(shí),報(bào)錯(cuò)。  大家是否遇到過?
      Java代碼  收藏代碼
      1. public List findBySql(String sql, List params, int pageNo, int pageSize,  
      2. Class clazz) {  
      3. SQLQuery sqlQuery = getCurrentSession().createSQLQuery(sql);  
      4. if (params != null && !params.isEmpty()) {  
      5. for (int i = 0, size = params.size(); i < size; i++) {  
      6. sqlQuery.setParameter(i, params.get(i));  
      7. }  
      8. }  
      9. sqlQuery.setFirstResult((pageNo - 1) * pageSize);  
      10. sqlQuery.setMaxResults(pageSize);  
      11. sqlQuery.setResultTransformer(Transformers.aliasToBean(clazz));  
      12. return sqlQuery.list();  
      13. }  

      問題補(bǔ)充:報(bào)錯(cuò)信息:could not find setter for rownum_

      用createSQLQuery的方式,查詢的結(jié)果setResultTransformer()了一下。
      并且設(shè)置了firstResult和MaxResult.

      現(xiàn)象:
      當(dāng)firstResult為0的時(shí)候,一切正常,當(dāng)firstResult不為0的時(shí)候報(bào) “could not find setter for rownum_”的錯(cuò)誤
      如果不setResultTransformer,設(shè)置的firstResult和MaxResult不受影響。

      主要是改sql
      1、別名要大寫
      如:select day DAY,count(id) COUNT from t_name group by day
      像樓下給的鏈接的解釋,oracle自動將別名大寫,但是如果自己設(shè)置了小寫的,就會出現(xiàn)上面的問題。 為了避免addScalar多個(gè),建議將別名直接大寫。
      2、當(dāng)然你可以采用多個(gè)addScalar,這樣只會,你就不能封裝為通用的dao了。 

      使用addSalar方法是,報(bào)錯(cuò)如下:
       IllegalArgumentException occurred while calling setter of  “包名.bean類名”

      解決方法:設(shè)置查詢出來的字段的類型
    • query.addScalar("productId", StandardBasicTypes.STRING);//要查詢出來的字段、類型
      • 本站是提供個(gè)人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多