在HQL select查詢語句中自定義查詢結果返回的資料型別
阿新 • • 發佈:2019-02-01
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語句:
執行該HQL語句得到的集合元素是類似於[INT,Owner]結構的Object陣列,其中第一個元素是Owner 的id,第二個元素是Owner例項 3.select語句也支援將查詢的結果存入一個固定結構的資料型別中 1>將查詢結果存入List中select o.id ,o from owner o
select new List<o.id,o.name> from Owner o
執行上面的HQL語句後得到一個List<list<int ,String>>,(預設的集合元素是陣列)
2>將查詢結果存入Map中
執行上面的HQL語句得到一個List<Map<int ,String>> 3>將查詢結果存入一個物件中select new Map<o.id,o.name>from Owner o
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語句寫為:
4>selset還支援給選中的表示式命名別名select new 包名.DD<o.id,o.name> from Owner o
select o.name as ownerName from Owner o