2012-10-25 35 views
1

我創建了一個使用ebean在搜索窗體中使用參數的查詢!框架2.0.4。根據給定的參數,結果可能有多達一百萬行。所以我使用setMaxRows(100)來限制結果。最後我有100個條目的列表,但請求數據的真正的聲明缺少LIMIT關鍵字並存儲在內存中的所有數據...使用setMaxRows的ebean極限結果集

Query<Process> query = Process.find.fetch("documents").fetch("documents.workflows").fetch("documents.workflows.state"); 
ExpressionList<Process> expression = query.where().between("documents.workflows.date", new java.sql.Date(edit_date.getTime()), new java.sql.Date(edit_to.getTime())); 
procs = expression.setMaxRows(100).orderBy().desc("id").findList(); 

的Java
PostgreSQL的9.1
ebean 2.7.3
玩!框架2.0.4

誰能告訴我爲什麼ebean沒有在我的情況下使用LIMIT關鍵字?

+1

這是對一個很老的版本Ebean但一個3歲的問題。 ..我只是想說,在這種情況下,我鼓勵你發佈到Ebean谷歌組。當然,一個LIMIT子句將會在這裏,但是在獲取時@ OneToMany的Ebean也會自動將它分解成多個sql語句等等。Stackoverflow並不總是獲得所需幫助的最佳論壇。 –

回答

1

我不知道爲什麼它沒有在聲明中使用LIMIT,我昨天發現了相同的情況。

我的解決方案(這對我來說是可以接受的)與RawSql和/或SqlQuery創建自定義查詢(既可以創建自定義語句)

+0

謝謝,但我正在使用ebean根據搜索表單中給定的參數構建更復雜的嵌套搜索語句。沒有ebean就會變得混亂。有沒有辦法獲得生成的語句而不執行它?所以我可以手動添加限制,然後使用rawsql? – n4cer

+0

當然,我不想強​​制你,但我發現完全相反的結論:更高級的查詢需要手動創建最佳用法(並非總是,但有時候......)。我經常檢查Ebean編寫的語句,並且經常用自定義SQL替換它們。注意,如果你使用語句記錄,你可以看到(並複製)Ebean的語句並編寫一個方法,它將對你的變化做相同的代碼。很可能你還會發現一些優化和改進的領域。 – biesior