執行簡單Hibernate查詢且結果有限的以下兩種方法中的任何一種都不適用於Sybase。它們都導致SybSQLException:'@ p0'附近的語法不正確。Hibernate setMaxResults()不適用於Sybase數據庫查詢
Query q = session.createQuery("from Record");
q.setMaxResults(50);
q.list();
或
Criteria criteria = session.createCriteria(Record.class);
criteria.setMaxResults(50);
criteria.list();
它出現在這兩種情況下看起來像產生實際的SQL ...
select top ? record_id, etc...
和Sybase正在猶豫不決的?,這Hibernate是不填寫50的值(這是我的猜測)。我到處搜索,而其他人遇到類似的錯誤,這不是因爲試圖限制結果。
我可以執行一個直接的SQL語句,如'從記錄中選擇頂部50',它工作完美,所以我知道我的Sybase版本支持語法。
我使用Hibernate 3.2和Sybase ASE 15.0.2
感謝您的回覆!是的,同樣的錯誤。我想其他人會發現這個問題,但我找不到其他人抱怨。 – 2011-01-26 18:02:10
有趣的是,當我按照上面的要求完成操作時,Hibernate在SQL中看起來像這樣: select limit? ? record_id等 我知道哪些不適用於Sybase。根據我的理解,只支持「前50名」的語法。但是,我得到的錯誤仍然是一樣的,因爲我認爲它是在抱怨'?'它相當於@ p0,它是一些內部的Hibernate變量。 – 2011-01-26 18:11:35