2017-04-22 6 views
0

私はケースクラスを持っており、これをテーブルクラスの拡張に使用します。Scala/Slick - 滑らかなテーブルをマップするために使用されるケースクラスのJSONライター

case class Foo (
    .. 
) 

class FooTable(tag: Tag) extends Table[Foo](tag, "foo") { 
    .. 
    override def * = (...) <> (Foo.tupled, Foo.unapply) 
} 

すべての作品が見つかりました。今私はこのケースクラス用のJSONライターも定義したいと思います。テーブル定義のスター投影と競合するとエラーになります上記のコード

object Foo { 
    implicit val fooWrites: Writes[Foo] = (
    ... 
)(unlift(Foo.unapply)) 
} 

- のようなものは、「tupled値は、オブジェクトmodels.Fooのメンバーではありません」。だから私は新しいケースクラスFooDuplicateを作成し、Fooのすべてのメンバーを複製し、JSONのエンコーディング/デコードに使用しました。私が理解するように、ケースクラスには継承はありません。

上記のシナリオでは、ケースクラスのメンバーを複製しないようにする方法はありますか?同じ理由で、含まれているケースクラスのJSONライターを定義することができないため、他のケースクラスを含むクラスも含まれていると思います。

答えて

1

問題を正しく理解していれば、同様の問題が発生しました。私は固定しました:

def * = (...) <>((Foo.apply _).tupled, Foo.unapply) 

それはかわいいですが動作します。当時私はその問題を理解するために探検しましたが、私は正当化を覚えていません。しかし、コンパニオンオブジェクトとそれが自動的に作成するものとは何か関係があります。

+0

正確に私が必要としたもの..ありがとう – srvy

関連する問題