在HQL select查詢語句中自定義查詢結果返回的資料型別

菜雞03號發表於2016-08-28

1.select子句用於選擇制定的屬性或者直接選擇某個屍體,當然select選擇的屬性必須是from後持久化類包含的屬性。例如:

select 0.name from Owner o


2.select可以選擇任意屬性,即不僅可以選擇持久化類的直接屬性,還可以選擇組建屬性包含的屬性,例如:

select o.name.set from Owner o
    在通常情況下,使用Select子句查詢的結果是集合,而集合元素就是select後的例項、屬性等組成的object陣列
    在特殊情況下,如果select後只有一項(包括持久化實力或屬性),則查詢得到的集合元素就是該持久化例項或屬性

    如果select後有多個項,則每個集合元素就是選擇出的多項組成的Object陣列,例如如下HQL語句:  
  select o.id ,o from owner o
   執行該HQL語句得到的集合元素是類似於[INT,Owner]結構的Object陣列,其中第一個元素是Owner 的id,第二個元素是Owner例項

3.select語句也支援將查詢的結果存入一個固定結構的資料型別中

1>將查詢結果存入List中
select new List<o.id,o.name> from Owner o
   執行上面的HQL語句後得到一個List<list<int ,String>>,(預設的集合元素是陣列)
2>將查詢結果存入Map中
select new Map<o.id,o.name>from Owner  o
   執行上面的HQL語句得到一個List<Map<int ,String>>
3>將查詢結果存入一個物件中
select new DD<o.id,o.name> from Owner o 
   執行上面的HQL語句得到一個List<DD>
  注:A. 這種情況使用中經常會拋這樣的異常:Unable to locate appropriate constructor on class。
       出現這個異常需要檢查以下幾種情況:
       1)引數構造器的引數型別是否正確
       2)引數構造器的順序和hql中的順序是否一致
       3)引數構造器的引數個數是否和hql中的個數一致
      4)引數構造器的引數型別是否TimeStamp
        對於DDTest類沒對映到配置檔案,通常要求將此hql語句寫為:
                           select new 包名.DD<o.id,o.name> from Owner o
4>selset還支援給選中的表示式命名別名
select o.name as ownerName from Owner  o


 

 
   



相關文章