1. 程式人生 > >hibernate裡createSQLQuery的addEntity()和setResultTransformer()方法

hibernate裡createSQLQuery的addEntity()和setResultTransformer()方法

為了給訪問加速,把DAO中的一些HQL的操作改成了SQL,其實最主要的原因是:操作的是多張表,返回的資料也來源於多個表的欄位;
String sql = “select A.id ID, A.name NAME, B.salary SALARY from employee A , Salary B where.......”;
Query query =getSession().createSQLQuery(sql)
.setResultTransformer(Transformers.aliasToBean(ReturnEmployee.class));
由於返回的ID, NAME, SALARY 非一個和表對應的一個BEAN,所以自己需要建立一個ReturnEmployee的BEAN,屬性包括ID, NAME, SALARY;在mysql下除錯,成功。
但是在ORACLE環境下卻報錯:

org.hibernate.PropertyNotFoundException: Could not find setter for ID on class com.ReturnEmployee

經過幾個小時的查錯,除錯,沒有發現問題的所在,只能擺脫GOOGLE了,最後在國外的一個論壇上找到了答案:

this is actually a limitation of some databases which return alias all uppercase instead of using the casing you actually specified.

until then use .addScalar(..) to workaround it.

原來是Hibernate對ORALCE的支援有BUG,所以修改程式碼為:
Query query = getSession().createSQLQuery(sql).addScalar("ID")
.addScalar("NAME").addScalar("SALARY");
就可以了,需要注意的是
List employeeData = query.list();
返回的employeeData 中的資料是object[],這樣取值:
List employeeBean = new ArrayList();
for (int i = 0; i < employeeData.size(); i++) {
Employee employee = new Employee();//把"裸"資料組裝到自己的employee類

Object[] object = (Object[]) employeeData.get(i);
employee.setId(object[0].toString());
employee.setName(object[1].toString());
employee.setOrgType(object[2].toString());

employeeBean.add(employee);

相關推薦

hibernatecreateSQLQuery的addEntity()setResultTransformer方法

為了給訪問加速,把DAO中的一些HQL的操作改成了SQL,其實最主要的原因是:操作的是多張表,返回的資料也來源於多個表的欄位; String sql = “select A.id ID, A.name NAME, B.salary SALARY from employee A , Salary B where

createTextNode() 方法createTextNode方法

script 屬性 tno tle html creat uno 按鈕 文本節點 <!DOCTYPE html><html><head><meta charset="utf-8"><title>菜鳥教程(runoo

django 一對多的添加記錄create save 方法,update 更新save方法的區別,查詢API的方法

bubuko 只有一個 pan 單獨 mode dig 萬能 .... .site 轉發之https://www.cnblogs.com/gyh04541/p/7910004.html 查詢api的方法: 表.objects.all() ---[obj1,obj2,..

JQuery繫結事件bind方法on方法的優缺點

jQuery繫結事件的方法有四種:bing()、live()、delegate()、on(),其中live(),已經被淘汰了,其存在很多的問題,不適合使用,而delegate能夠在繫結事件後,依然可以新增動態元素事件。on()可以說是前三種方法的結合體。 1.bind()方法: b

事件繫結中的call方法apply方法

今天對於call方法和apply方法有些懵,所以去看了些別人的總結,感覺有了點概念,把一些大佬寫的東西中自己感覺易懂的解釋和經典的案例記錄一下。 定義 call方法: 語法:call([thisObj[,arg1[, arg2[, [,.argN]]]]]) 定義:呼叫一個物件的一個

jQuery實現排他性mouseenter方法—京劇小人聚光燈

要點: 1.通過jQuery中篩選選擇器中的.siblings()選擇器,可以輕鬆獲取到非焦點同級標籤,注意篩選選擇器都是方法,有些可以傳遞引數,一般是指定獲取標籤元素的型別。 2..mouseenter()和mouseleave()方法和onmouseover()和onmouseout()

invalidaterequestLayout方法的區別

原文:https://blog.csdn.net/ddwhan0123/article/details/50601782  * invalidate() :* 請求重繪View樹,即draw()過程。把例子中他是整個重新整理著UI,並且從頭到尾並不會觸發onMeasure

jQuery新增-append方法after方法的區別

jquery的append()方法可以在被選中元素的結尾插入內容。這個意思是在該元素上做文章。 ex: $("p").append("hello,csdn"); after()方法可以在被選中的元素的下方插入內容,該內容重新起一行, 與被選擇的元素並沒有什麼邏輯上的聯

細談jQuery的findchildren方法

先來說find()方法,W3C的解釋是: 獲得當前匹配元素集合中每個元素的後代,由選擇器進行篩選 常用的方法如下:$('li.item-ii').find( 必填引數 ).find方法的引數的必須的,引數可以為屬性的class名(class=“XXX”),元素名(<

C# 中隱藏一個窗體後開啟另一個窗體,使用ShowHide方法

新建兩個窗體Form1 和Form2 ; Form1 中的按鈕 的單擊事件方法裡面的程式碼; Form2 fm2= new Form2(this); fm2.Show(); this.Hide(); Form2 窗體裡面的程式碼; Form1 fm1 = new Fo

Java判斷相等==equals方法

 Java中判斷兩個變數是否相等有兩種方式:一種是利用==運算子,另一種是利用equals方法。如果變數是基本型別,那麼使用==和使用equals會得到相同的結果,都是判斷變數的值是否相對。如果變數是

jQuery入門學習之slideTogglebind方法

  speed:三種預定速度("slow","normal","fast")還有表示動畫時長的毫秒數值(如:1000)   [callback] 在動畫完成時執行的函式   例子:   html: <p>這是測試用的dddddddddddddddddd<br />         

Java多執行緒中,JoinInterrupt方法的使用

更多詳細的解答請轉至:http://my.oschina.net/summerpxy/blog/198457;http://uule.iteye.com/blog/1101994;(比如有一個執行緒t.當在Main執行緒中呼叫t.join()的時候,那麼Main執行緒必須拿

load() setInterval方法實現頁面區域性重新整理

       load() 方法通過 AJAX 請求從伺服器載入資料,並把返回的資料放置到指定的元素中。 語法 load(url,data,function(response,status,xhr)) 引數 描述 url 規定要將請求傳送到哪個 URL。 da

Java集合框架上機練習題:編寫一個Book類,該類至少有nameprice兩個屬性。該類要實現Comparable接口,在接口的compareTo方法.....

ext .cn 數據庫 識別 方法 屬性 set package compareto 編寫一個Book類,該類至少有name和price兩個屬性。該類要實現Comparable接口,在接口的compareTo()方法中規定兩個Book類實例的大小關系為二者的price屬性的

什麼是方法以及evallisnannumberstring的使用

js在執行前,瀏覽器會給它一個環境,叫window全域性作用域 alert() prompt() confirm()都是方法 怎麼趙這個方法和屬性歸屬?     1、arr。find()  find()是arr的     2、沒有帶.  在誰的環境下是誰的 判別變數的資料型別ty

spring中mock RestTemplateFeignClientmock方法內部的方法呼叫

目的 要測試ServiceImpl類中的方法methodA 難點 methodA中呼叫了restTemplate的方法或者FeignClient的方法,而這兩個方法都依賴第三方應用,如果第三方應用沒有準備好,則會報錯,為了在單元測試中不依賴第三方應用,因此需要mock他們。

Java 的equals方法 == 的區別聯絡

淺談Java中的equals和==  在初學Java時,可能會經常碰到下面的程式碼: String str1 = new String("hello"); String str2 = new String("hello"); System.out.print

Python面的write方法寫入檔案時候的亂碼如何解決?

注轉自:https://www.cnblogs.com/mmykdbc/p/7417784.html 注:此文為轉載,如有侵權請告知,此文將予以刪除   為了為今後的大資料以及人工智慧的大潮流的到來做準備,最近在學Python,在這個過程中,會遇到許多漢字之間的轉換,今天在寫w

Collections.sort方法lambda表示式結合實現集合的排序

1.使用Collections.sort()實現集合的排序,這裡的方法具體指的是:   Collections.sort(List list, Compatator c)       第一個引數:為要進行排序的集合。     第二個引數:Compatator的實現,指定排序的方式。   2