?? hibernate2 參考文檔之十五.txt
字號(hào):
Chapter 15. SQL查詢
Prev Next
--------------------------------------------------------------------------------
Chapter 15. SQL查詢
你也可以直接使用你的數(shù)據(jù)庫(kù)方言表達(dá)查詢。在你想使用數(shù)據(jù)庫(kù)的某些特性的時(shí)候,這是非常有用的, 比如Oracle中的CONNECT關(guān)鍵字。這也會(huì)掃清你把原來(lái)直接使用SQL/JDBC 的程序移植到Hibernate道路上的障礙。
15.1. 創(chuàng)建一個(gè)基于SQL的Query
和普通的HQL查詢一樣,SQL查詢同樣是從Query接口開(kāi)始的。惟一的區(qū)別是使用Session.createSQLQuery()方法。
Query sqlQuery = sess.createSQLQuery("select {cat.*} from cats {cat}", "cat", Cat.class);
sqlQuery.setMaxResults(50);
List cats = sqlQuery.list();
傳遞給createSQLQuer()的三個(gè)參數(shù)是:
SQL查詢語(yǔ)句
表的別名
查詢返回的持久化類
別名是為了在SQL語(yǔ)句中引用對(duì)應(yīng)的類(本例中是Cat)的屬性的。你也可以傳遞一個(gè)別名的String 數(shù)組和一個(gè)對(duì)應(yīng)的Class的數(shù)組進(jìn)去,每行就可以得到多個(gè)對(duì)象。
15.2. 別名和屬性引用
上面使用的{cat.*}標(biāo)記是“所有屬性的”的簡(jiǎn)寫(xiě)。你可以顯式的列出需要的屬性,但是你必須讓Hibernate為每個(gè) 屬性提供SQL列別名。這些列的的占位表示符是以表別名為前導(dǎo),再加上屬性名。下面的例子中,我們從一個(gè)其它的表(cat_log) 中獲取Cat對(duì)象,而非Cat對(duì)象原本在映射元數(shù)據(jù)中聲明的表。注意你在where子句中也可以使用 屬性別名。
String sql = "select cat.originalId as {cat.id}, cat.mateid as {cat.mate}, cat.sex as {cat.sex}, cat.weight*10 as {cat.weight}, cat.name as {cat.name}"
+ " from cat_log cat where {cat.mate} = :catId"
List loggedCats = sess.createSQLQuery(sql, "cat", Cat.class)
.setLong("catId", catId)
.list();
注意: 如果你明確的列出了每個(gè)屬性,你必須包含這個(gè)類和它的子類的屬性! //??
15.3. 為SQL查詢命名
可以在映射文檔中定義SQL查詢的名字,然后就可以像調(diào)用一個(gè)命名HQL查詢一樣直接調(diào)用命名SQL查詢。
List people = sess.getNamedQuery("mySqlQuery")
.setMaxResults(50)
.list();
<sql-query name="mySqlQuery">
<return alias="person" class="eg.Person"/>
SELECT {person}.NAME AS {person.name}, {person}.AGE AS {person.age}, {person}.SEX AS {person.sex}
FROM PERSON {person} WHERE {person}.NAME LIKE 'Hiber%'
</sql-query>
--------------------------------------------------------------------------------
Prev Up Next
Chapter 14. 條件查詢(Criteria Query) Home Chapter 16. 繼承映射(Inheritance Mappings)
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -