當我在squeryl中創建一個查詢時,它返回一個Query [T]對象。查詢還沒有執行,當我迭代Query對象時(Query [T] extends Iterable [T])。Squeryl:顯式運行查詢
執行查詢時,必須有一個事務{}或一個inTransaction {}塊。
我只是說SELECT查詢和交易將不是必要的,但squeryl框架需要它們。
我想在我的應用程序的模型中創建一個查詢,並將其直接傳遞給模板中的視圖助手遍歷它並呈現數據的視圖。 這隻有在將事務{}塊放入控制器時纔有可能(控制器包含模板調用,因此迭代的模板也在其中)。無法將事務塊置於模型中,因爲該模型沒有真正執行查詢。
但在我的理解中,交易與控制器無關。這是數據庫框架使用模型的一個決定,如何使用它以及在哪裏使用事務。所以我希望事務{}塊位於模型中。
我知道我可以 - 而不是返回Query [T]實例 - 調用此Query [T]對象上的Iterable [T] .toList,然後返回創建的列表。然後整個查詢在模型中執行,一切都很好。但我不喜歡這種方法,因爲從數據庫請求的所有數據都必須緩存在這個列表中。我更喜歡將數據直接傳遞給視圖的方式。我喜歡MySql功能,在結果集很大時對它進行流式傳輸。
有什麼可能嗎?可能類似於函數Query [T] .executeNow(),它將請求發送到數據庫,能夠關閉事務,但仍然使用MySQL流式傳輸功能並在接收到(選定並因此固定的)結果集的其餘部分時它被訪問?由於結果集在查詢的時候是固定的,因此關閉事務不應該是一個問題。
如果你發佈你的解決方案,你會發現一個有趣/令人驚訝的解決方案,這將是很好的。 –