2013-08-04 28 views
4

我一直在對Play框架進行評估,並學習Scala,這很有趣。來自java,向斯卡拉的轉變採取了一點點心理體操,但我現在是一個粉絲。用SLICK和22列限制的Playframework

我有一個很大的數據庫已經使用JPA映射,我只是想繼續使用這段代碼(與休眠),但這不是最好的或推薦的方法與斯卡拉。所以我開始使用SLICK來映射一些表格,但是在太遠之前我意識到我會遇到Scala對案例類和函數參數(不超過22)的限制問題。

我覺得這完全令人困惑,現代的ORM會有這個限制。我對Scala沒有任何限制 - 畢竟誰想要將22個參數傳遞給函數。所以我的問題是:爲什麼設計一個帶有這個限制的圖書館?當然,它應該被設計成映射到常規課程?我不在乎它是否用反射來完成工作。

我已經看到了解決這個問題的方法,它需要拆分大小寫類並使用隱式轉換進行重組。但這只是一個黑客。

我想如果我想繼續使用Play,那麼我應該切換到Java並使用JPA。

回答

4

這個奇怪的編號限制很可能是因爲Scala編程語言將元組的最大大小限制爲22,並且元組是表示錶行的一種很好的方式。有關更多信息,請參閱Why are scala functions limited to 22 parameters?。在Scala 2.11(大概是在Slick)中有一些關於消除這個限制的討論,並且有an open issue to track it,但是這在最近的2.11版本中沒有發生。

我不是一個油滑的開發人員,我確信他們可以創建一個基於沒有限制的ORM,而不像列表而不是元組。這是我爲什麼會這樣做的假設。

  • Typesafe並不想從頭開始構建ORM,因此ScalaQuery中的Slick是ScalaQuery最穩定和最廣泛採用的ORM包之一。
  • ScalaQuery作者認爲適合使用元組作爲設計的關鍵部分。
  • ScalaQuery作者覺得列表超過22列的表有點罕見。
  • 他覺得那些拉超過22列的桌子投影更爲罕見。
  • Typesafe正致力於從元組(和函數)中刪除22個限制,並且這對於Scala是必需的,一旦完成,Slick將不再有22列列表出現問題。由於該問題必須在Scala中解決,因此創建一個新的ORM並與社區合作來採用它更有意義。
+0

我完全意識到這一點,但我的問題是爲什麼設計一個具有此限制的ORM?例如。他們可以使用反射像休眠。我不認爲他們需要改變斯卡拉。 –

+0

啊,我不完全清楚你的問題。我更新了我對這個限制爲什麼會出現在Slick中的猜測。 – lreeder