私はsquerylでクエリを作成すると、クエリ[T]オブジェクトを返します。クエリーはまだ実行されておらず、クエリーオブジェクト(クエリー[T]がIterable [T]を拡張します)を反復処理するときに実行されます。Squeryl:明示的にクエリを実行
クエリの実行の前後にトランザクション{}またはinTransaction {}ブロックが存在する必要があります。
私はちょうどSELECTクエリについて言及していますが、トランザクションは必要ではありませんが、squerylフレームワークにはそれらが必要です。
私のアプリケーションのモデルでクエリを作成し、テンプレートのビューヘルパーがそれを反復してデータを表示するビューに直接渡したいと思います。 これは、コントローラにトランザクション{}ブロックを入れるときにのみ可能です(コントローラにはテンプレートの呼び出しが含まれているので、繰り返しを行うテンプレートも内部にあります)。モデルが本当にクエリを実行しないので、トランザクション{}ブロックをモデルに入れることはできません。
私の理解では、トランザクションはコントローラとは関係ありません。どのデータベースフレームワークを使用するか、どのように使用するか、そしてどこでトランザクションを使用するかは、モデルの決定です。だからトランザクション{}ブロックをモデルに入れたい。
私は、Query [T]インスタンスを返す代わりに、このQuery [T]オブジェクトに対してIterable [T] .toListを呼び出して、作成したリストを返すことができます。次に、クエリ全体がモデル内で実行され、すべてが正常です。しかし、データベースから要求されたすべてのデータがこのリストにキャッシュされなければならないので、私はこのアプローチが嫌いです。私は、このデータが直接ビューに渡される方法を好むでしょう。私は、結果セットが大きいときにストリーミングするMySql機能が好きです。
可能性はありますか? MySQLのストリーミング機能を使用し、残りの(選択された固定された)結果セットを受け取ると、データベースに要求を送信し、トランザクションを閉じることができる関数Query [T] .executeNow()アクセスしましたか?結果セットはクエリの瞬間に修正されるため、トランザクションの終了は問題ではありません。私はここを参照してください
興味深い/驚くべきものを見つけたら、ソリューションを投稿すればいいと思います。 –