2014-09-19 50 views
10

我試圖在Slick中針對視圖運行SELECT *式樣的查詢。理想情況下,我最終會得到一個函數,您可以傳遞一組列名作爲Seq[String],它將執行查詢SELECT col1, col2, ... FROM view。如果這不可行,那麼只需返回所有列即可(SELECT * FROM view)。在Slick中選擇許多任意列

我知道我可以通過爲這個視圖定義一個Table類以及一個伴隨的case類,但其中一些視圖有數百個列(這將需要嵌套元組,因爲有22個元素限制元組),並且有許多視圖我必須這樣做,所以這是很多代碼來編寫/生成/維護。我想盡可能避免這種情況。

這是可以在Slick?通過定義一個Table類而不必在靜態代碼中定義列(使用動態列字符串列表初始化某個類將是可接受的),或者通過僅使用sql"""..."""自己生成SQL查詢並以某種方式獲取.as[...]來處理返回一組列任意長度?

我不需要對實際的列類型做任何特殊的處理:在數據庫端我們已經有了一些類型的混合,但是如果它們都被當作文本列在Slick端上我都可以。

+2

有趣的問題,就像一個筆記,列的限制,現在刪除更新版本的浮油。 – 2014-09-20 06:53:53

+1

要追蹤@ EndeNeu的評論,請參閱http://slick.typesafe.com/doc/2.1.0/userdefined.html#using-custom-record-types-in-queries。 – 2014-09-20 20:50:51

回答

3

油滑不適合您的要求。

當您想要訪問任意列時(例如使用列名稱的List[String]),您將失去Slick提供的所有類型安全優勢,因爲它無法驗證架構。

這意味着您不得不離開Slick的表類,並使用生成的SQL(使用String查詢)完全動態地生成解決方案。

儘管Slick允許您手動編寫SQL(請參閱StaticQuery.query函數),但其他庫更適合執行此任務。我建議看看ScalikeJDBC。

+1

這也是我們得出的結論。我們結束了轉向jOOQ,並非常高興。 – Alex 2014-11-03 15:13:06

+0

jOOQ與Scala集成一起移動的過程如何? ('Option''s and such?) – Chris 2014-11-03 18:31:39

+0

對於jOOQ我們還是比較新的,所以我無法回答這個權威性問題,但我發現Scala整合很不錯,但並不好。總的來說,jOOQ是一個非常令人印象深刻的ORM,它的(有限的)Scala集成並不妨礙我們。 – Alex 2014-11-03 23:38:02