21

Scala (2.10 を使用) と Slick (2.0-M2 を使用) は初めてです。Slick でテーブルの 22 列の制限を回避する方法の 1 つは、ネストされたタプルを使用することです。GitHub でこの部分的なコードを見つけたにもかかわらず、その方法がわかりません。

Current dev branch Scala (2.11-M5) supports case classes with more than 22 elements, but not tuples with arity > 22. And Slick is not yet distributed for Scala 2.11 pre-releases. How can I define a 33 column table (and have it work with all Slick's syntactic sugar)?

N.B., I'm trying to support an existing schema and can't change the table normalization.

4

2 に答える 2

2

リンク先のテスト コードは古くなっています。テーブルにマッピングを使用しない場合は、簡単です。 の型*は、単一のタプル、HList、または入れ子になったタプルのいずれであっても、テーブルをクエリするときに取得する戻り値の型に対応します。Slick 2.1 以降、これはすべての操作で機能します。(2.0 では射影がサポートされて*いなかったため、別の射影とオーバーライドを定義する必要がありましたcreate_*。) HList の例については、こちらを参照してください。

*プロジェクションをカスタム タイプにマップする場合<>は、1 つのタプルに対しても演算子を使用しますが、ケース クラスに対して自動的に生成される メソッドtupledとメソッドの利便性が得られないため、2 つのマッピングを記述する必要があります。 hereunapplyに示すように、関数 (マップされていない型からマップされた型へ、およびその逆) を手動で実行します。Scala 2.11 ではこの状況は改善されないことに注意してください。22 を超えるフィールドを持つケース クラスが許可されますが、22 を超えるアリティに対応する型がないため、 and をFunction使用することはできません。tupledunapply

これらの関数を記述する代わりに、マニュアルで説明されているように、マップされた型に対応する持ち上げられた型を定義できます。これは、マップされたタイプのネストされたケース クラス (各フィールドが 22 以下) がある場合に特に便利です。ケース クラスごとに個別のマッピングを定義するだけで、プロジェクション (またはプロジェクションまたはクエリの他の場所) で使用すると自動的に構成されます。*

于 2015-01-30T16:52:01.347 に答える