求助,這樣查詢的hql語句應該怎么寫?我想通過UId查詢PCre 愛問知
top語法HQL不支持 變通的方法是 String HQL = "from Photo p where *='"+id+"' order by PCredit desc"; Query query = *Query(HQL); //設定起始位置 *stResult(0); //設定個數 *Results(2); //返回值是一個list,里面就是排序的前兩個對象 List resList = *(); 謝謝!。
hql 查詢語句
假設你的類這樣寫:
class Student
{
public student ()
{}
public student (string name, id)
setName () {}
setId () {}
}
那么第一個QL結果是:
s = new student () ;
*e (name) ;
* (id) ;
第二個:
s = new student (name, id) ;
這是猜測的,你用的應該是Hibernate 3吧。
你可以試試。
hibernate中的查詢方式有哪些
hibernate的查詢方式主要有以下幾種,你可以看看,也可以去官方下載文檔來看看,不過是英文版本。
希望對你有幫助,謝謝 hibernate查詢方式 ? 小結Hibernate。 ? Hibernate對多。
? hibernate查詢。 ? Hibernate之查。
? Hibernate 查。 更多相關推薦。
在HQL中關鍵字不區分大小寫,但是屬性和類名區分大小寫,下面介紹各種類型的Hibernate的HQL查詢。1、Hibernate HQL查詢:簡單屬性查詢* 單一屬性查詢,返回結果集屬性列表,元素類型和實體類中相應的屬性類型一致* 多個屬性查詢,返回的集合元素是對象數組,數組元素的類型和對應的屬性在實體類中的類型一致 數組的長度取決與select中屬性的個數* 如果認為返回數組不夠對象化,可以采用HQL動態實例化Student對象2、Hibernate HQL查詢:實體對象查詢* N + 1問題,在默認情況下,使用*e查詢,有可以能出現N+1問題,所謂的N+1是在查詢的時候發出了N+1條sql語句,1: 首先發出一條查詢對象id列表的sql,N: 根據id列表到緩存中查詢,如果緩存中不存在與之匹配的數據,那么會根據id發出相應的sql語句* list和iterate的區別?* list每次都會發出sql語句,list會向緩存中放入數據,而不利用緩存中的數據* iterate:在默認情況下iterate利用緩存數據,但如果緩存中不存在數據有可以能出現N+1問題3、Hibernate HQL查詢:條件查詢* 可以采用拼字符串的方式傳遞參數 Java代碼:List students = *Query("select *, * from Student s where * like '%1%'").list(); * 可以采用 ?來傳遞參數(索引從0開始) Java代碼:List students = *Query("select *, * from Student s where * like ?").setParameter(0, "%1%").list(); //可以使用?方式傳遞參數 //參數的索引從0開始 //傳遞的參數值,不用單引號引起來 //注意方法鏈編程 * 可以采用 :參數名 來傳遞參數 Java代碼:List students = *Query ("select *, * from Student s where * like :myname").setParameter("myname", "%1%").list(); * 如果傳遞多個參數,可以采用setParamterList方法 Java代碼:List students = *Query("select *, * from Student s where * in(:myids)").setParameterList("myids", new Object[]{1, 2, 3, 4, 5}).list(); * 在HQL中可以使用數據庫的函數,如:date_format Java代碼:List students = *Query("select *, * from Student s where date_format(*Time, '%Y-%m')=?").setParameter(0, "2008-02").list(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); //查詢2008-01-10到2008-02-15創建的學生 List students = *Query("select *, * from Student s where *Time between ? and ?") ..setParameter(0, *("2008-01-10 00:00:00")) .setParameter(1, *("2008-02-15 23:59:59")) .list(); 4、Hibernate HQL查詢:直接使用sql進行查詢 Java代碼:List students = *SQLQuery("select * from t_student").list(); 不會返回對象,而是所有屬性! 5、Hibernate HQL查詢:分頁查詢* setFirstResult(),從0開始* setMaxResults,每頁顯示多少條數據 Java代碼:List students = *Query("from Student") .setFirstResult(1) .setMaxResults(2) .list(); 6、Hibernate HQL查詢:對象導航查詢,在HQL中采用 . 進行導航7、Hibernate HQL查詢:連接查詢* 內連 Sql代碼:SELECT *, * FROM Student s (inner) join *s c * 外連接(左連接/右連接) Sql代碼:SELECT *, * FROM Student s left join *s c 8、Hibernate HQL查詢:統計查詢 Java代碼: List students =*Query("select *, count(s) from Student s join *s c " +"group by * order by *").list(); for (Iterator iter=*or(); *t();) { Object[] obj = (Object[])*(); *n(obj[0] + ", " + obj[1]); } 9、DML風格的操作(盡量少用,因為和緩存不同步) Java代碼:*Query ("update Student s set *=? where *< ?") .setParameter(0, "李四") .setParameter(1, 5) .executeUpdate(); 應當盡量少用,因為和緩存不同步,也就是說,假如在執行上面的語句之前,已經把student封裝成一個list曾經拿了出來,再執行上面的語句對 student中的表進行數據更新,然后再list Student表,則此時的list是從緩存中取的數據,而不是從表中找到的數據,也就是 說,list拿到的是update前的數據,所以造成了這種不同步,所以這種風格盡量少用。
從這個方面也可以看得出Hibernate并不適用于聚集性,統計,大量批量的更新,刪除等操作。
關于Hibernate的三種查詢方式
hql提供了更接近于傳統SQL語句的查詢語法,容易過度吧,官方推薦使用,它提供強大的查詢功能。一般使用這種查詢。
Criteria查詢,可移植性好,用起來也很方便,當你的查詢條件很多時,可用Example創建一查詢依據,查出屬性與之類似的對象,代碼簡潔運用很方便。
Native SQL一般在遇到很復雜的查詢條件時使用。
說白了,靈活運用就行,在不同情況下使用不同的解決方案,建議你多看些實例,見得多了用起來就比較容易判斷該用哪一個。
如果問題解決,請點贊采納,謝謝!!!